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