Luhn test of credit card numbers: Difference between revisions

m
Line 5,148:
=={{header|SNOBOL4}}==
Using a precomputed array.
<lang SNOBOL4> define('luhn(n)a,d,i,j,sum') :(luhn_end)
luhn n = reverse(n); a = array('0:9')
ln1 a<i> = (2 * i / 10) + remdr(2 * i,10)
i = lt(i,9) i + 1 :s(ln1)
ln2 n len(1) . d = :f(ln3)
d = ne(remdr(j,2),0) a<d>; j = j + 1
sum = sum + d :(ln2)
ln3 luhn = 0; luhn = eq(remdr(sum,10),0) 1 :(return)
luhn_end
 
ok = array('0:1')
ok<0> = 'FAIL'
ok<1> = 'OK'
 
* Test and display
define('test(n)') :(test_end)
test output = n ': ' ok<luhn(n)> :(return)
test_end
 
test('49927398716')
test('49927398717')
test('1234567812345678')
test('1234567812345670')
end
</lang>
1,479

edits