2 ms·
Memories. ~10 years ago I looked in to this stuff as part of adding national checksum support to an IBAN library. It was quite a mission to discover the number
by contingencies 3y ago
Memories. ~10 years ago I looked in to this stuff as part of adding national checksum support to an IBAN library. It was quite a mission to discover the number of systems out there, most of which were insufficiently documented or undocumented. Wound up reverse engineering quite a few of them (period braindump available[3]).
In the end I wrote a function[1] which reverses an input known to fail a checksum to determine probable transcription errors based upon a manually compiled, exhaustive list of probable mistranscriptions[2]. I was quite impressed at how fast and accurate it was.
From a systems architecture standpoint, I learned that there is really no excuse today for creating a system in which human transcription may occur without a checksum mechanism. Largely, however, QR codes and the trusted optical exchange of identifiers in physical settings has superseded this solution class (but brought its own vulnerabilities and concerns).
[1] https://github.com/globalcitizen/php-iban/blob/master/php-iban.php#L429 https://github.com/globalcitizen/php-iban/blob/master/php-ib...
[2] https://raw.githubusercontent.com/globalcitizen/php-iban/master/mistranscriptions.txt https://raw.githubusercontent.com/globalcitizen/php-iban/mas... [3] https://github.com/globalcitizen/php-iban/issues/39#issuecomment-176278064 https://github.com/globalcitizen/php-iban/issues/39#issuecom...