Validate a check digit
Paste identifiers into the left pane and each line comes back marked VALID, INVALID, or ERROR. Invalid lines report the digit that was expected, so a transposed pair is visible without recomputing anything by hand.
ERROR means the value could not be checked at all: an IMEI with 14 digits, a VIN containing the letter O, an ISBN-10 with a check character other than 0-9 or X. Those are structural problems, not failed arithmetic.
Add check digit
Switch the mode when you have the payload and need the final character. Feed 400638133393 to the EAN-13 scheme and it returns 4006381333931. Feed GBWEST12345698765432 to the IBAN scheme and it returns GB82WEST12345698765432.
Two schemes behave differently here. IBAN check digits sit in positions 3 and 4, so paste the country code followed by the account body. A VIN check character sits in position 9, so paste all 17 characters and the ninth is replaced.
Mod 10, mod 11, and mod 97
Most consumer identifiers use one of three families.
Mod 10 covers Luhn (card numbers, IMEI, ISIN) and the GTIN weights behind EAN, UPC, and ISBN-13. It catches every single-digit error, but it misses the transposition 09 to 90, which is why it is not used where digits are read aloud.
Mod 11 covers ISBN-10, ISSN, and VIN. The extra modulus catches transpositions, at the cost of a remainder of 10 that will not fit in one digit. That is what the X check character is for.
Mod 97 covers IBAN. The whole account number is rearranged, letters expand to two digits, and the result must leave a remainder of 1. It catches far more than a single-digit scheme because the check is 2 digits wide.
Verhoeff and Damm
Verhoeff and Damm are the schemes to reach for when you are designing an identifier rather than reading someone else’s. Both catch every single-digit error and every adjacent transposition, including 09 to 90.
Verhoeff needs a dihedral multiplication table, a permutation table, and an inverse table. Damm needs one quasigroup table and no exceptions at all, which makes it the easier of the two to implement correctly.
Batch checks
Batch by newline reads each line as a separate value, so a column pasted from a spreadsheet returns one verdict per row. The counters below the panes total the valid, invalid, and unreadable lines, which is usually the fastest way to confirm an export before importing it somewhere stricter.