41 lines
846 B
Plaintext
41 lines
846 B
Plaintext
include "cowgol.coh";
|
|
|
|
# Damm test on number given as ASCII string
|
|
# Returns check digit
|
|
sub damm(num: [uint8]): (chk: uint8) is
|
|
var table: uint8[] := {
|
|
0,3,1,7,5,9,8,6,4,2,
|
|
7,0,9,2,1,5,4,8,6,3,
|
|
4,2,0,6,8,7,1,3,5,9,
|
|
1,7,5,0,9,8,3,4,2,6,
|
|
6,1,2,3,0,4,5,9,7,8,
|
|
3,6,7,4,2,0,9,5,8,1,
|
|
5,8,6,9,7,2,0,1,3,4,
|
|
8,9,4,5,3,6,2,0,1,7,
|
|
9,4,3,8,6,1,7,2,0,5,
|
|
2,5,8,1,4,3,6,7,9,0
|
|
};
|
|
|
|
chk := 0;
|
|
while [num] != 0 loop
|
|
chk := table[(chk<<1) + (chk<<3) + ([num] - '0')];
|
|
num := @next num;
|
|
end loop;
|
|
end sub;
|
|
|
|
# Test and print
|
|
sub test(num: [uint8]) is
|
|
print(num);
|
|
print(":");
|
|
if damm(num) == 0 then
|
|
print("Pass\n");
|
|
else
|
|
print("Fail\n");
|
|
end if;
|
|
end sub;
|
|
|
|
test("5724");
|
|
test("5727");
|
|
test("112946");
|
|
test("112949");
|