Damm algorithm: Difference between revisions
Content added Content deleted
No edit summary |
Alpha bravo (talk | contribs) (Added AutoHotkey) |
||
Line 144: | Line 144: | ||
check digit of 5727 is invalid |
check digit of 5727 is invalid |
||
check digit of 112946 is valid</pre> |
check digit of 112946 is valid</pre> |
||
=={{header|AutoHotkey}}== |
|||
<lang AutoHotkey>Damm(num){ |
|||
row := 1, Damm := [[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]] |
|||
for i, v in StrSplit(SubStr(num, 1, -1)){ |
|||
++row := Damm[row, v+1] |
|||
} |
|||
return (SubStr(num, 0)=row-1 && !Damm[row, row]) |
|||
}</lang> |
|||
Examples:<lang AutoHotkey>result := "" |
|||
for i, num in [5724, 5727, 112946, 112949] |
|||
result .= num "`tis " (Damm(num) ? "valid" : "not valid") "`n" |
|||
MsgBox % result</lang> |
|||
Outputs:<pre>5724 is valid |
|||
5727 is not valid |
|||
112946 is valid |
|||
112949 is not valid</pre> |
|||
=={{header|AWK}}== |
=={{header|AWK}}== |