Damm algorithm: Difference between revisions
Content added Content deleted
(Added Forth entry) |
Not a robot (talk | contribs) (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]]. |