Luhn test of credit card numbers: Difference between revisions
Content deleted Content added
Added Uiua solution |
→{{header|Lua}}: more simple and concise, based on Ada algorithm |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 3,922:
=={{header|langur}}==
{{trans|Go}}
<syntaxhighlight lang="langur">
val luhntest = fn(s) {
val
val
val oddeven = len(numbers) rem 2
for[=0]
_for += if(
} div 10
}
val
"49927398716": true,
"49927398717": false,
Line 3,939 ⟶ 3,940:
}
for
val
write
writeln if(
}
{{out}}
Line 4,068 ⟶ 4,070:
=={{header|Lua}}==
<syntaxhighlight lang="lua">
function luhn_test(cc_number)
assert(type(cc_number) == 'string')
local
for
-- extract single character as string then convert to integer
local digit = cc_number:sub(idx, idx) + 0
end▼
if is_odd then
sum = sum + digit
▲ local s2=0
else
sum = sum + ((digit * 2) % 10) + (digit // 5)
end -- if
is_odd = not is_odd -- toggle between odd and even
end -- for
return (sum % 10) == 0
end -- function luhn_test
for _, val in ipairs{"49927398716", "49927398717", "1234567812345678", "1234567812345670"} do
print(val, luhn_test(val))
end -- for
</syntaxhighlight>
print(luhn'49927398716')▼
print(luhn'49927398717')▼
print(luhn'1234567812345678')▼
=={{header|M2000 Interpreter}}==
Line 6,031 ⟶ 6,024:
s2Mapping[x[i] + 1];
</syntaxhighlight>
=={{header|SETL}}==
<syntaxhighlight lang="setl">program luhn_test;
tests := [
1234567812345670
];
loop for test in tests do
print(test, if luhn test then "pass" else "fail" end);
end loop;
op luhn(n);
fac := 2;
digits := [val d * (fac := 3-fac) : d in reverse str n];
return 0 = +/[d - if d>9 then 9 else 0 end : d in digits] mod 10;
▲ end op;
end program;</syntaxhighlight>
{{out}}
<pre>49927398716 pass
49927398717 fail
1234567812345678 fail
1234567812345670 pass</pre>
=={{header|Shen}}==
|