Luhn test of credit card numbers: Difference between revisions

m
 
(2 intermediate revisions by 2 users not shown)
Line 3,922:
=={{header|langur}}==
{{trans|Go}}
<syntaxhighlight lang="langur">val .luhntest = ffn(.s) {
val .t = [0, 2, 4, 6, 8, 1, 3, 5, 7, 9]
val .numbers = s2n .s
Line 3,932:
}
 
val .tests = h{
"49927398716": true,
"49927398717": false,
Line 5,698:
=={{header|RPL}}==
Card numbers shall be entered as strings to avoid any rounding error when testing long ones.
{{works with|Halcyon CalcRPL|4.2.8HP48-C}}
{| class="wikitable"
! RPL code
Line 5,704:
|-
|
« 0 → card even
« 0
≪ 0 card SIZE 1 '''FOR''' j
card SIZE 1 card'''FOR''' j DUP SUB STR→
'''IF'''card j 2 MOD NOTDUP '''THENSUB '''OBJ→
'''IF''' 2 * 10 MOD LAST / FLOOR +even '''ENDTHEN'''
DUP + -110 MOD LASTARG / IP + '''STEPEND'''
10 MOD NOT + 1 'even' STO-
-1 '''STEP'''
≫ ≫ '<span style="color:blue">LUHN?</span>' STO
10 MOD NOT
» » '<span style="color:blue">LUHN?</span>' STO
|
<span style="color:blue">LUHN?</span> ''( "card_number" -- boolean ) ''
sum = 0 ; loop for j=n to 1
loop for j=n to 1
digit = card[j]
if even digit
multiply it by 2 and add digits
sum += digit ; reverse parity flag
return not(sum mod 10)
|}
{ "49927398716" "49927398717" "1234567812345678" "1234567812345670" } 1 « <span style="color:blue">LUHN?</span> cases» DOLIST
≪ { } 1 cases SIZE '''FOR''' j cases j GET <span style="color:blue">LUHN?</span> + '''NEXT''' ≫ ≫ EVAL
{{out}}
<pre>
885

edits