@@ -9,7 +9,8 @@ defmodule CreditCard do
9
9
diners_club: ~r/ ^3(?:0[0-5]|[68][0-9])[0-9]{11}$/ ,
10
10
amex: ~r/ ^3[47][0-9]{13}$/ ,
11
11
discover: ~r/ ^6(?:011|5[0-9]{2})[0-9]{12}$/ ,
12
- jcb: ~r/ ^(?:2131|1800|35\d {3})\d {11}$/
12
+ jcb: ~r/ ^(?:2131|1800|35\d {3})\d {11}$/ ,
13
+ unionpay: ~r/ ^62[0-5]\d {13,16}$/
13
14
]
14
15
15
16
@ test_numbers [
@@ -22,7 +23,8 @@ defmodule CreditCard do
22
23
4005519200000004 4009348888881881 4012000033330026
23
24
4012000077777777 4217651111111119 4500600000000061
24
25
4000111111111115 ) ,
25
- jcb: ~w( 3530111333300000 3566002020360505)
26
+ jcb: ~w( 3530111333300000 3566002020360505) ,
27
+ unionpay: ~w( 6212341111111111)
26
28
] |> Keyword . values |> List . flatten
27
29
28
30
@ opts % {
@@ -169,6 +171,10 @@ defmodule CreditCard do
169
171
@ card_types [ :jcb ] |> Regex . match? ( number )
170
172
end
171
173
174
+ def card_is ( number , :unionpay ) do
175
+ @ card_types [ :unionpay ] |> Regex . match? ( number )
176
+ end
177
+
172
178
@ spec rotate ( String . t ) :: String . t
173
179
defp rotate ( number ) do
174
180
if number > 9 , do: number = rem ( number , 10 ) + 1
0 commit comments