ISBN13 check digit: Difference between revisions

Content added Content deleted
(Added solution for Action!)
(Add Modula-2)
Line 1,737: Line 1,737:
False</pre>
False</pre>



=={{header|Modula-2}}==
<lang modula2>MODULE ISBN;
FROM InOut IMPORT WriteString, WriteLn;
FROM Strings IMPORT Length;

PROCEDURE validISBN(s: ARRAY OF CHAR): BOOLEAN;
VAR total, i, length: CARDINAL;
BEGIN
total := 0;
length := Length(s);
IF (length # 14) OR (s[3] # '-') THEN
RETURN FALSE;
END;
FOR i := 0 TO length-1 DO
IF i # 3 THEN
IF (s[i] < '0') OR (s[i] > '9') THEN
RETURN FALSE;
ELSIF (i < 3) AND (i MOD 2 = 1) OR (i > 3) AND (i MOD 2 = 0) THEN
total := total + 3 * (ORD(s[i]) - ORD('0'));
ELSE
total := total + ORD(s[i]) - ORD('0');
END;
END;
END;
RETURN total MOD 10 = 0;
END validISBN;

PROCEDURE check(s: ARRAY OF CHAR);
BEGIN
WriteString(s);
WriteString(': ');
IF validISBN(s) THEN
WriteString('good');
ELSE
WriteString('bad');
END;
WriteLn;
END check;

BEGIN
check('978-1734314502');
check('978-1734314509');
check('978-1788399081');
check('978-1788399083');
END ISBN.</lang>
{{out}}
<pre>978-1734314502: good
978-1734314509: bad
978-1788399081: good
978-1788399083: bad</pre>


=={{header|Nanoquery}}==
=={{header|Nanoquery}}==