Skip to content

Commit a3631cc

Browse files
authored
feat(card): add support for card UkrCard (#81)
Fix #46 Co-authored-by: Umair Fayaz <umair.fayaz@thoughtworks.com>
1 parent 99a9c56 commit a3631cc

File tree

2 files changed

+40
-2
lines changed

2 files changed

+40
-2
lines changed

src/Dedge.Cardizer/Dedge.Cardizer.fs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -728,4 +728,25 @@ type Cardizer =
728728
[ 6; 7; 6; 7; 7; 0 ]
729729
[ 6; 7; 6; 7; 7; 4 ] ].[Cardizer.next 3]
730730

731-
Cardizer.GenerateCard prefix length
731+
Cardizer.GenerateCard prefix length
732+
733+
/// <summary>Returns a random UkrCard number.</summary>
734+
/// <returns>Random UkrCard number</returns>
735+
/// <example>
736+
/// This sample shows how to call the <see cref="NextUkrCard"/> method.
737+
/// <code>
738+
/// void PrintUkrCard()
739+
/// {
740+
/// Console.WriteLine(Cardizer.NextUkrCard());
741+
/// }
742+
/// </code>
743+
/// </example>
744+
static member NextUkrCard([<Optional; DefaultParameterValue(From16To19.Random)>] ukrCardLengthOption) =
745+
let length =
746+
match ukrCardLengthOption with
747+
| From16To19.Random -> Cardizer.NextInRange 16 19
748+
| _ -> int ukrCardLengthOption
749+
750+
let prefix = Cardizer.NextSeqInRange 60400100 60420099
751+
752+
Cardizer.GenerateCard prefix length

src/Tests/Tests.fs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -433,4 +433,21 @@ let ``Should generate valid Maestro UK`` length expectedLength =
433433

434434
prefixInRange |> should be True
435435
card |> should haveLength expectedLength
436-
card |> luhn |> should be LuhnCheck
436+
card |> luhn |> should be LuhnCheck
437+
438+
[<Theory>]
439+
[<InlineData(From16To19.Sixteen, 16)>]
440+
[<InlineData(From16To19.Seventeen, 17)>]
441+
[<InlineData(From16To19.Eighteen, 18)>]
442+
[<InlineData(From16To19.Nineteen, 19)>]
443+
let ``Should generate valid UkrCard`` length expectedLength =
444+
let card = Cardizer.NextUkrCard length
445+
446+
let start = card.Substring(0, 8) |> int
447+
448+
let prefixInRange =
449+
(start >= 60400100 && start <= 60420099)
450+
451+
prefixInRange |> should be True
452+
card |> should haveLength expectedLength
453+
card |> luhn |> should be LuhnCheck

0 commit comments

Comments
 (0)