Skip to content

Commit 0a16e0c

Browse files
committed
Add China UnionPay
1 parent 3359255 commit 0a16e0c

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

lib/credit_card.ex

+8-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ defmodule CreditCard do
99
diners_club: ~r/^3(?:0[0-5]|[68][0-9])[0-9]{11}$/,
1010
amex: ~r/^3[47][0-9]{13}$/,
1111
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}$/
1314
]
1415

1516
@test_numbers [
@@ -22,7 +23,8 @@ defmodule CreditCard do
2223
4005519200000004 4009348888881881 4012000033330026
2324
4012000077777777 4217651111111119 4500600000000061
2425
4000111111111115 ),
25-
jcb: ~w(3530111333300000 3566002020360505)
26+
jcb: ~w(3530111333300000 3566002020360505),
27+
unionpay: ~w(6212341111111111)
2628
] |> Keyword.values |> List.flatten
2729

2830
@opts %{
@@ -169,6 +171,10 @@ defmodule CreditCard do
169171
@card_types[:jcb] |> Regex.match?(number)
170172
end
171173

174+
def card_is(number, :unionpay) do
175+
@card_types[:unionpay] |> Regex.match?(number)
176+
end
177+
172178
@spec rotate(String.t) :: String.t
173179
defp rotate(number) do
174180
if number > 9, do: number = rem(number,10) + 1

test/credit_card_test.exs

+3
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ defmodule CreditCardTest do
1212
assert CreditCard.card_type("6011000990139424") == :discover
1313
assert CreditCard.card_type("6759671431256542") == :maestro
1414
assert CreditCard.card_type("3530111333300000") == :jcb
15+
assert CreditCard.card_type("6212341111111111") == :unionpay
1516
end
1617

1718
test "detect specific types" do
@@ -29,6 +30,8 @@ defmodule CreditCardTest do
2930
assert !CreditCard.card_is("30569309025904", :maestro)
3031
assert CreditCard.card_is("3530111333300000", :jcb)
3132
assert !CreditCard.card_is("6759671431256542", :jcb)
33+
assert CreditCard.card_is("6212341111111111", :unionpay)
34+
assert !CreditCard.card_is("5555555555554444", :unionpay)
3235
end
3336

3437
test "luhn verification" do

0 commit comments

Comments
 (0)