German IBAN, checked by HTML alone

This page contains no script. The field's pattern attribute holds a 59,966-character regular expression that the browser's own form validation runs on every change.

Accepted
DE, 2 check digits, then 18 digits. Capitals, no spaces.
Valid
DE89370400440532013000
Invalid
DE89370400440532013002 (last character changed)

Change the last character and the field turns red; submitting is blocked with the browser's own message. The field is required, so an empty field is invalid too. For an optional field, remove required: browsers never test an empty value against the pattern.

The check catches any single wrong digit. Some schemes miss certain swaps of neighbours: Luhn misses 09 ↔ 90, barcodes miss swaps of digits that differ by 5. Generated by rexsum.