16 lines
667 B
Text
16 lines
667 B
Text
ClearAll[LuhnQ, VakudISINQ]
|
|
LuhnQ[n_Integer] := Block[{digits = Reverse@IntegerDigits@n}, Mod[Total[{digits[[;; ;; 2]], IntegerDigits[2 #] & /@ digits[[2 ;; ;; 2]]}, -1], 10] == 0]
|
|
VakudISINQ[sin_String] := Module[{s = ToUpperCase[sin]},
|
|
If[StringMatchQ[s,
|
|
LetterCharacter ~~ LetterCharacter ~~
|
|
Repeated[DigitCharacter | LetterCharacter, {9}] ~~
|
|
DigitCharacter],
|
|
s = StringJoin[
|
|
Characters[s] /.
|
|
Thread[CharacterRange["A", "Z"] -> ToString /@ Range[10, 35]]];
|
|
LuhnQ[ToExpression[s]]
|
|
,
|
|
False
|
|
]
|
|
]
|
|
VakudISINQ /@ {"US0378331005", "US0373831005", "U50378331005", "US03378331005", "AU0000XVGZA3", "AU0000VXGZA3", "FR0000988040"}
|