Luhn test of credit card numbers: Difference between revisions

Content added Content deleted
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}}==