Damm algorithm: Difference between revisions

Content added Content deleted
(Added Forth entry)
(Add Cowgol)
Line 598: Line 598:
=> (damm? "112946")
=> (damm? "112946")
true</pre>
true</pre>

=={{header|Cowgol}}==
<lang cowgol>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");</lang>

{{out}}

<pre>5724:Pass
5727:Fail
112946:Pass
112949:Fail</pre>


=={{header|D}}==
=={{header|D}}==
Line 641: Line 690:
112946 is valid
112946 is valid
112949 is invalid</pre>
112949 is invalid</pre>

=={{header|Delphi}}==
=={{header|Delphi}}==
See [[#Pascal|Pascal]].
See [[#Pascal|Pascal]].