Verhoeff algorithm: Difference between revisions

Content added Content deleted
(→‎{{header|Raku}}: Add a Raku example)
(→‎{{header|Raku}}: Oops, order of operations, make a little more concise)
Line 274: Line 274:
}
}
say "Checkdigit: {@i[$c]}";
say "Checkdigit: {@i[$c]}";
+($int ~ @i[$c]);
}
}


Line 292: Line 293:
## TESTING
## TESTING


for 236, 2363, 123451, 12345, 123456789012, 1234567890120 -> $int, $check {
for 236, 12345, 123456789012 -> $int {
checksum $int, :verbose( $int.chars < 8 );
my $check = checksum $int, :verbose( $int.chars < 8 );
validate $check, :verbose( $int.chars < 8 );
validate $check, :verbose( $int.chars < 8 );
validate +($check.chop ~ 9), :verbose( $int.chars < 8 );</lang>
validate +($check.chop ~ 9), :verbose( $int.chars < 8 );
}</lang>
{{out}}
{{out}}
<pre>Checkdigit calculation for 236:
<pre>Checkdigit calculation for 236:
Line 321: Line 323:
Checkdigit: incorrect
Checkdigit: incorrect


Checkdigit calculation for 123451:
Checkdigit calculation for 12345:
i ni p(i, ni) c
i ni p(i, ni) c
0 0 0 0
0 0 0 0
1 1 5 5
1 5 8 8
2 5 9 1
2 4 7 1
3 4 0 1
3 3 6 7
4 3 3 4
4 2 5 2
5 2 8 7
5 1 2 4
Checkdigit: 1
6 1 7 0
Checkdigit: 0


Validation calculation for 12345:
Validation calculation for 123451:
i ni p(i, ni) c
i ni p(i, ni) c
0 5 5 5
0 1 1 1
1 4 2 8
1 5 8 9
2 3 3 5
2 4 7 2
3 2 1 9
3 3 6 8
4 1 4 5
4 2 5 3
5 1 2 0
Checkdigit: incorrect
Checkdigit: correct


Validation calculation for 12349:
Validation calculation for 123459:
i ni p(i, ni) c
i ni p(i, ni) c
0 9 9 9
0 9 9 9
1 4 2 7
1 5 8 1
2 3 3 9
2 4 7 8
3 2 1 8
3 3 6 2
4 1 4 9
4 2 5 7
5 1 2 5
Checkdigit: incorrect
Checkdigit: incorrect