ISBN13 check digit: Difference between revisions
Content added Content deleted
m (→{{header|Phix}}: added syntax colouring, marked p2js compatible) |
(add Red) |
||
Line 2,460: | Line 2,460: | ||
978-2-74839-908-0 : Good |
978-2-74839-908-0 : Good |
||
978-2-74839-908-5 : Bad check-digit 5; should be 0 |
978-2-74839-908-5 : Bad check-digit 5; should be 0 |
||
</pre> |
|||
=={{header|Red}}== |
|||
<lang Red>check_valid_isbn13: function [str] [ |
|||
is_digit: charset [#"0" - #"9"] |
|||
remove-each i str [not pick is_digit i] ; remove non-digits |
|||
either 13 = length? str [ ; reject strings of incorrect length |
|||
sum: 0 |
|||
repeat i 13 [ |
|||
mul: either even? i [3] [1] ; multiplier for odd/even digits |
|||
sum: sum + (mul * to integer! to string! pick str i) |
|||
] |
|||
zero? (sum % 10) ; check if remainder mod 10 is zero |
|||
] [ |
|||
false |
|||
] |
|||
] |
|||
; check given examples |
|||
foreach [str] ["978-1734314502" "978-1734314509" "978-1788399081" "978-1788399083"] [ |
|||
prin str |
|||
prin " - " |
|||
print check_valid_isbn13 str |
|||
] |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
978-1734314502 - true |
|||
978-1734314509 - false |
|||
978-1788399081 - true |
|||
978-1788399083 - false |
|||
</pre> |
</pre> |
||