Luhn test of credit card numbers: Difference between revisions
Content added Content deleted
m (→{{header|M2000 Interpreter}}: bare lang tag) |
|||
Line 4,274: | Line 4,274: | ||
1234567812345670 is valid |
1234567812345670 is valid |
||
</pre> |
</pre> |
||
=={{header|Picat}}== |
|||
<lang Picat>go => |
|||
Nums = ["49927398716","49927398717","1234567812345678","1234567812345670"], |
|||
foreach (N in Nums) |
|||
println([N, isluhn10(N)]) |
|||
end, |
|||
nl. |
|||
% |
|||
% isluhn10(num) returns 1 is valid, else 0 |
|||
% |
|||
% Assumption: input num is a string. |
|||
% |
|||
isluhn10(Num) = V => |
|||
X = [I : I in Num.reverse()] ++ [""], |
|||
Digits = "0246813579", |
|||
M = new_map([(I.to_string()=Digits[I+1]) : I in 0..9]), |
|||
V1 = sum([X[I].to_integer() + M.get2(X[I+1].to_string(),0) : I in 1..2..Num.length]), |
|||
V := cond(V1 mod 10 == 0, 1, 0). |
|||
% A variant of Map.get with conversions |
|||
get2(M, Key, Default)=V => |
|||
if M.has_key(Key) then V= M.get(Key).to_integer() else V=Default end.</lang> |
|||
Output: |
|||
<pre>[49927398716,1] |
|||
[49927398717,0] |
|||
[1234567812345678,0] |
|||
[1234567812345670,1]</pre> |
|||
=={{header|PicoLisp}}== |
=={{header|PicoLisp}}== |