FAILURE MAP
← Case archive

FA-72776 / Check-digit algorithms / Open access

LEI check is computed without the 00 placeholder · case 01

Nearly every generated LEI fails validation.

Verified by executionVariant 1 · 8 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The number is formed from the prefix alone, so it is not shifted by two decimal places.

VERIFIED REPAIR

Append "00" to the prefix before converting and reducing mod 97.

Unsuccessful approach: Appending a single 0 shifts by only one decimal place.

Case contract

Generate ISO 17442 LEI check digits (ISO 7064 MOD 97-10): the 18-character alphanumeric prefix is upper-cased (other input returns None), "00" is appended, letters become 10..35, and the check is 98 - (number mod 97) written as exactly two digits. Return the 20-character LEI.

Why this case matters

Regulatory reporting tools assign and verify legal entity identifiers.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(prefix):
    t = prefix.upper()
    if len(t) != 18 or not t.isascii() or not t.isalnum():
        return None
    n = int(''.join(str(int(ch, 36)) for ch in t))
    return t + '%02d' % (98 - n % 97)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression ["NH4O4Q9HMI8RUJ0D6Y"]', ['NH4O4Q9HMI8RUJ0D6Y'], 'NH4O4Q9HMI8RUJ0D6Y73'], ['regression ["9K6IWOG7TS4VC3SHAM"]', ['9K6IWOG7TS4VC3SHAM'], '9K6IWOG7TS4VC3SHAM78'], ['control ["5493001KJTIIGC8Y1"]', ['5493001KJTIIGC8Y1'], None], ['control ["5493001KJTIIGC8Y1R-"]', ['5493001KJTIIGC8Y1R-'], None], ['control ["000000000000000000"]', ['000000000000000000'], '00000000000000000098'], ['control ["TD7FDXWKLVRV07ALBK"]', ['TD7FDXWKLVRV07ALBK'], 'TD7FDXWKLVRV07ALBK05'], ['control ["ACLPCCV3EGBW4QG3I6"]', ['ACLPCCV3EGBW4QG3I6'], 'ACLPCCV3EGBW4QG3I685'], ['control ["64WI551TBNLAZEBU15"]', ['64WI551TBNLAZEBU15'], '64WI551TBNLAZEBU1502']], [['regression ["TD7FDXWKLVRV07ALBK"]', ['TD7FDXWKLVRV07ALBK'], 'TD7FDXWKLVRV07ALBK05'], ['regression ["ACLPCCV3EGBW4QG3I6"]', ['ACLPCCV3EGBW4QG3I6'], 'ACLPCCV3EGBW4QG3I685'], ['control ["000000000000000000"]', ['000000000000000000'], '00000000000000000098'], ['control ["5493001KJTIIGC8Y1"]', ['5493001KJTIIGC8Y1'], None], ['control ["5493001KJTIIGC8Y1R-"]', ['5493001KJTIIGC8Y1R-'], None], ['control ["2G388X3WHEMWPIB3DO"]', ['2G388X3WHEMWPIB3DO'], '2G388X3WHEMWPIB3DO38'], ['control ["WYITG3CIA2EMN51FG8"]', ['WYITG3CIA2EMN51FG8'], 'WYITG3CIA2EMN51FG854'], ['control ["X22YG0E1MY8V7QUQUU"]', ['X22YG0E1MY8V7QUQUU'], 'X22YG0E1MY8V7QUQUU47']], [['regression ["II5XCIYZ03SDPPSQ7Z"]', ['II5XCIYZ03SDPPSQ7Z'], 'II5XCIYZ03SDPPSQ7Z30'], ['regression ["H6UNZ3Z93AZ7BYYPJC"]', ['H6UNZ3Z93AZ7BYYPJC'], 'H6UNZ3Z93AZ7BYYPJC84'], ['control ["5493001KJTIIGC8Y1R-"]', ['5493001KJTIIGC8Y1R-'], None], ['control ["000000000000000000"]', ['000000000000000000'], '00000000000000000098'], ['control ["5493001KJTIIGC8Y1"]', ['5493001KJTIIGC8Y1'], None], ['control ["2Y76WQMSKZ26SJ35YB"]', ['2Y76WQMSKZ26SJ35YB'], '2Y76WQMSKZ26SJ35YB12'], ['control ["CU3JXPUYQHVR22PKEM"]', ['CU3JXPUYQHVR22PKEM'], 'CU3JXPUYQHVR22PKEM49'], ['control ["EPXGBGA2NLNHRPYT3N"]', ['EPXGBGA2NLNHRPYT3N'], 'EPXGBGA2NLNHRPYT3N83']], [['regression ["WYITG3CIA2EMN51FG8"]', ['WYITG3CIA2EMN51FG8'], 'WYITG3CIA2EMN51FG854'], ['regression ["X22YG0E1MY8V7QUQUU"]', ['X22YG0E1MY8V7QUQUU'], 'X22YG0E1MY8V7QUQUU47'], ['control ["5493001KJTIIGC8Y1"]', ['5493001KJTIIGC8Y1'], None], ['control ["5493001KJTIIGC8Y1R-"]', ['5493001KJTIIGC8Y1R-'], None], ['control ["000000000000000000"]', ['000000000000000000'], '00000000000000000098'], ['control ["11H96GYM52SNV78B6G"]', ['11H96GYM52SNV78B6G'], '11H96GYM52SNV78B6G12'], ['control ["8WZS9XRTCO6DTNCKMU"]', ['8WZS9XRTCO6DTNCKMU'], '8WZS9XRTCO6DTNCKMU93'], ['control ["QBZJYTHC8GNQSKDJSD"]', ['QBZJYTHC8GNQSKDJSD'], 'QBZJYTHC8GNQSKDJSD15']], [['regression ["U6G55SH046WQ164I4P"]', ['U6G55SH046WQ164I4P'], 'U6G55SH046WQ164I4P20'], ['regression ["2Y76WQMSKZ26SJ35YB"]', ['2Y76WQMSKZ26SJ35YB'], '2Y76WQMSKZ26SJ35YB12'], ['control ["000000000000000000"]', ['000000000000000000'], '00000000000000000098'], ['control ["5493001KJTIIGC8Y1"]', ['5493001KJTIIGC8Y1'], None], ['control ["5493001KJTIIGC8Y1R-"]', ['5493001KJTIIGC8Y1R-'], None], ['control ["JA1SCUCU57DVVWD2MF"]', ['JA1SCUCU57DVVWD2MF'], 'JA1SCUCU57DVVWD2MF33'], ['control ["FUNIAT1L7171F0KBF9"]', ['FUNIAT1L7171F0KBF9'], 'FUNIAT1L7171F0KBF963'], ['control ["Z62YQ0YUTHLSESKG4A"]', ['Z62YQ0YUTHLSESKG4A'], 'Z62YQ0YUTHLSESKG4A79']]]
for label, args, expected in fixtures[N - 1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression ["NH4O4Q9HMI8RUJ0D6Y"]NH4O4Q9HMI8RUJ0D6Y25NH4O4Q9HMI8RUJ0D6Y73Failed
regression ["9K6IWOG7TS4VC3SHAM"]9K6IWOG7TS4VC3SHAM599K6IWOG7TS4VC3SHAM78Failed
control ["5493001KJTIIGC8Y1"]NoneNonePassed
control ["5493001KJTIIGC8Y1R-"]NoneNonePassed
control ["000000000000000000"]0000000000000000009800000000000000000098Passed
control ["TD7FDXWKLVRV07ALBK"]TD7FDXWKLVRV07ALBK67TD7FDXWKLVRV07ALBK05Failed
control ["ACLPCCV3EGBW4QG3I6"]ACLPCCV3EGBW4QG3I629ACLPCCV3EGBW4QG3I685Failed
control ["64WI551TBNLAZEBU15"]64WI551TBNLAZEBU156664WI551TBNLAZEBU1502Failed

SHA-256 / 4f81477bf6d6e1f4ce9d20dcb0eb0f2d735153787ae142f57fa9d3067b61511a

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(prefix):
    t = prefix.upper()
    if len(t) != 18 or not t.isascii() or not t.isalnum():
        return None
    n = int(''.join(str(int(ch, 36)) for ch in t + '0'))
    return t + '%02d' % (98 - n % 97)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression ["NH4O4Q9HMI8RUJ0D6Y"]', ['NH4O4Q9HMI8RUJ0D6Y'], 'NH4O4Q9HMI8RUJ0D6Y73'], ['regression ["9K6IWOG7TS4VC3SHAM"]', ['9K6IWOG7TS4VC3SHAM'], '9K6IWOG7TS4VC3SHAM78'], ['control ["5493001KJTIIGC8Y1"]', ['5493001KJTIIGC8Y1'], None], ['control ["5493001KJTIIGC8Y1R-"]', ['5493001KJTIIGC8Y1R-'], None], ['control ["000000000000000000"]', ['000000000000000000'], '00000000000000000098'], ['control ["TD7FDXWKLVRV07ALBK"]', ['TD7FDXWKLVRV07ALBK'], 'TD7FDXWKLVRV07ALBK05'], ['control ["ACLPCCV3EGBW4QG3I6"]', ['ACLPCCV3EGBW4QG3I6'], 'ACLPCCV3EGBW4QG3I685'], ['control ["64WI551TBNLAZEBU15"]', ['64WI551TBNLAZEBU15'], '64WI551TBNLAZEBU1502']], [['regression ["TD7FDXWKLVRV07ALBK"]', ['TD7FDXWKLVRV07ALBK'], 'TD7FDXWKLVRV07ALBK05'], ['regression ["ACLPCCV3EGBW4QG3I6"]', ['ACLPCCV3EGBW4QG3I6'], 'ACLPCCV3EGBW4QG3I685'], ['control ["000000000000000000"]', ['000000000000000000'], '00000000000000000098'], ['control ["5493001KJTIIGC8Y1"]', ['5493001KJTIIGC8Y1'], None], ['control ["5493001KJTIIGC8Y1R-"]', ['5493001KJTIIGC8Y1R-'], None], ['control ["2G388X3WHEMWPIB3DO"]', ['2G388X3WHEMWPIB3DO'], '2G388X3WHEMWPIB3DO38'], ['control ["WYITG3CIA2EMN51FG8"]', ['WYITG3CIA2EMN51FG8'], 'WYITG3CIA2EMN51FG854'], ['control ["X22YG0E1MY8V7QUQUU"]', ['X22YG0E1MY8V7QUQUU'], 'X22YG0E1MY8V7QUQUU47']], [['regression ["II5XCIYZ03SDPPSQ7Z"]', ['II5XCIYZ03SDPPSQ7Z'], 'II5XCIYZ03SDPPSQ7Z30'], ['regression ["H6UNZ3Z93AZ7BYYPJC"]', ['H6UNZ3Z93AZ7BYYPJC'], 'H6UNZ3Z93AZ7BYYPJC84'], ['control ["5493001KJTIIGC8Y1R-"]', ['5493001KJTIIGC8Y1R-'], None], ['control ["000000000000000000"]', ['000000000000000000'], '00000000000000000098'], ['control ["5493001KJTIIGC8Y1"]', ['5493001KJTIIGC8Y1'], None], ['control ["2Y76WQMSKZ26SJ35YB"]', ['2Y76WQMSKZ26SJ35YB'], '2Y76WQMSKZ26SJ35YB12'], ['control ["CU3JXPUYQHVR22PKEM"]', ['CU3JXPUYQHVR22PKEM'], 'CU3JXPUYQHVR22PKEM49'], ['control ["EPXGBGA2NLNHRPYT3N"]', ['EPXGBGA2NLNHRPYT3N'], 'EPXGBGA2NLNHRPYT3N83']], [['regression ["WYITG3CIA2EMN51FG8"]', ['WYITG3CIA2EMN51FG8'], 'WYITG3CIA2EMN51FG854'], ['regression ["X22YG0E1MY8V7QUQUU"]', ['X22YG0E1MY8V7QUQUU'], 'X22YG0E1MY8V7QUQUU47'], ['control ["5493001KJTIIGC8Y1"]', ['5493001KJTIIGC8Y1'], None], ['control ["5493001KJTIIGC8Y1R-"]', ['5493001KJTIIGC8Y1R-'], None], ['control ["000000000000000000"]', ['000000000000000000'], '00000000000000000098'], ['control ["11H96GYM52SNV78B6G"]', ['11H96GYM52SNV78B6G'], '11H96GYM52SNV78B6G12'], ['control ["8WZS9XRTCO6DTNCKMU"]', ['8WZS9XRTCO6DTNCKMU'], '8WZS9XRTCO6DTNCKMU93'], ['control ["QBZJYTHC8GNQSKDJSD"]', ['QBZJYTHC8GNQSKDJSD'], 'QBZJYTHC8GNQSKDJSD15']], [['regression ["U6G55SH046WQ164I4P"]', ['U6G55SH046WQ164I4P'], 'U6G55SH046WQ164I4P20'], ['regression ["2Y76WQMSKZ26SJ35YB"]', ['2Y76WQMSKZ26SJ35YB'], '2Y76WQMSKZ26SJ35YB12'], ['control ["000000000000000000"]', ['000000000000000000'], '00000000000000000098'], ['control ["5493001KJTIIGC8Y1"]', ['5493001KJTIIGC8Y1'], None], ['control ["5493001KJTIIGC8Y1R-"]', ['5493001KJTIIGC8Y1R-'], None], ['control ["JA1SCUCU57DVVWD2MF"]', ['JA1SCUCU57DVVWD2MF'], 'JA1SCUCU57DVVWD2MF33'], ['control ["FUNIAT1L7171F0KBF9"]', ['FUNIAT1L7171F0KBF9'], 'FUNIAT1L7171F0KBF963'], ['control ["Z62YQ0YUTHLSESKG4A"]', ['Z62YQ0YUTHLSESKG4A'], 'Z62YQ0YUTHLSESKG4A79']]]
for label, args, expected in fixtures[N - 1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression ["NH4O4Q9HMI8RUJ0D6Y"]NH4O4Q9HMI8RUJ0D6Y47NH4O4Q9HMI8RUJ0D6Y73Failed
regression ["9K6IWOG7TS4VC3SHAM"]9K6IWOG7TS4VC3SHAM969K6IWOG7TS4VC3SHAM78Failed
control ["5493001KJTIIGC8Y1"]NoneNonePassed
control ["5493001KJTIIGC8Y1R-"]NoneNonePassed
control ["000000000000000000"]0000000000000000009800000000000000000098Passed
control ["TD7FDXWKLVRV07ALBK"]TD7FDXWKLVRV07ALBK79TD7FDXWKLVRV07ALBK05Failed
control ["ACLPCCV3EGBW4QG3I6"]ACLPCCV3EGBW4QG3I687ACLPCCV3EGBW4QG3I685Failed
control ["64WI551TBNLAZEBU15"]64WI551TBNLAZEBU156964WI551TBNLAZEBU1502Failed

SHA-256 / 86d872bc2bf9834246c74fd572cec82e156037ed628f3cae20c8cc567d74c6af

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(prefix):
    t = prefix.upper()
    if len(t) != 18 or not t.isascii() or not t.isalnum():
        return None
    n = int(''.join(str(int(ch, 36)) for ch in t + '00'))
    return t + '%02d' % (98 - n % 97)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression ["NH4O4Q9HMI8RUJ0D6Y"]', ['NH4O4Q9HMI8RUJ0D6Y'], 'NH4O4Q9HMI8RUJ0D6Y73'], ['regression ["9K6IWOG7TS4VC3SHAM"]', ['9K6IWOG7TS4VC3SHAM'], '9K6IWOG7TS4VC3SHAM78'], ['control ["5493001KJTIIGC8Y1"]', ['5493001KJTIIGC8Y1'], None], ['control ["5493001KJTIIGC8Y1R-"]', ['5493001KJTIIGC8Y1R-'], None], ['control ["000000000000000000"]', ['000000000000000000'], '00000000000000000098'], ['control ["TD7FDXWKLVRV07ALBK"]', ['TD7FDXWKLVRV07ALBK'], 'TD7FDXWKLVRV07ALBK05'], ['control ["ACLPCCV3EGBW4QG3I6"]', ['ACLPCCV3EGBW4QG3I6'], 'ACLPCCV3EGBW4QG3I685'], ['control ["64WI551TBNLAZEBU15"]', ['64WI551TBNLAZEBU15'], '64WI551TBNLAZEBU1502']], [['regression ["TD7FDXWKLVRV07ALBK"]', ['TD7FDXWKLVRV07ALBK'], 'TD7FDXWKLVRV07ALBK05'], ['regression ["ACLPCCV3EGBW4QG3I6"]', ['ACLPCCV3EGBW4QG3I6'], 'ACLPCCV3EGBW4QG3I685'], ['control ["000000000000000000"]', ['000000000000000000'], '00000000000000000098'], ['control ["5493001KJTIIGC8Y1"]', ['5493001KJTIIGC8Y1'], None], ['control ["5493001KJTIIGC8Y1R-"]', ['5493001KJTIIGC8Y1R-'], None], ['control ["2G388X3WHEMWPIB3DO"]', ['2G388X3WHEMWPIB3DO'], '2G388X3WHEMWPIB3DO38'], ['control ["WYITG3CIA2EMN51FG8"]', ['WYITG3CIA2EMN51FG8'], 'WYITG3CIA2EMN51FG854'], ['control ["X22YG0E1MY8V7QUQUU"]', ['X22YG0E1MY8V7QUQUU'], 'X22YG0E1MY8V7QUQUU47']], [['regression ["II5XCIYZ03SDPPSQ7Z"]', ['II5XCIYZ03SDPPSQ7Z'], 'II5XCIYZ03SDPPSQ7Z30'], ['regression ["H6UNZ3Z93AZ7BYYPJC"]', ['H6UNZ3Z93AZ7BYYPJC'], 'H6UNZ3Z93AZ7BYYPJC84'], ['control ["5493001KJTIIGC8Y1R-"]', ['5493001KJTIIGC8Y1R-'], None], ['control ["000000000000000000"]', ['000000000000000000'], '00000000000000000098'], ['control ["5493001KJTIIGC8Y1"]', ['5493001KJTIIGC8Y1'], None], ['control ["2Y76WQMSKZ26SJ35YB"]', ['2Y76WQMSKZ26SJ35YB'], '2Y76WQMSKZ26SJ35YB12'], ['control ["CU3JXPUYQHVR22PKEM"]', ['CU3JXPUYQHVR22PKEM'], 'CU3JXPUYQHVR22PKEM49'], ['control ["EPXGBGA2NLNHRPYT3N"]', ['EPXGBGA2NLNHRPYT3N'], 'EPXGBGA2NLNHRPYT3N83']], [['regression ["WYITG3CIA2EMN51FG8"]', ['WYITG3CIA2EMN51FG8'], 'WYITG3CIA2EMN51FG854'], ['regression ["X22YG0E1MY8V7QUQUU"]', ['X22YG0E1MY8V7QUQUU'], 'X22YG0E1MY8V7QUQUU47'], ['control ["5493001KJTIIGC8Y1"]', ['5493001KJTIIGC8Y1'], None], ['control ["5493001KJTIIGC8Y1R-"]', ['5493001KJTIIGC8Y1R-'], None], ['control ["000000000000000000"]', ['000000000000000000'], '00000000000000000098'], ['control ["11H96GYM52SNV78B6G"]', ['11H96GYM52SNV78B6G'], '11H96GYM52SNV78B6G12'], ['control ["8WZS9XRTCO6DTNCKMU"]', ['8WZS9XRTCO6DTNCKMU'], '8WZS9XRTCO6DTNCKMU93'], ['control ["QBZJYTHC8GNQSKDJSD"]', ['QBZJYTHC8GNQSKDJSD'], 'QBZJYTHC8GNQSKDJSD15']], [['regression ["U6G55SH046WQ164I4P"]', ['U6G55SH046WQ164I4P'], 'U6G55SH046WQ164I4P20'], ['regression ["2Y76WQMSKZ26SJ35YB"]', ['2Y76WQMSKZ26SJ35YB'], '2Y76WQMSKZ26SJ35YB12'], ['control ["000000000000000000"]', ['000000000000000000'], '00000000000000000098'], ['control ["5493001KJTIIGC8Y1"]', ['5493001KJTIIGC8Y1'], None], ['control ["5493001KJTIIGC8Y1R-"]', ['5493001KJTIIGC8Y1R-'], None], ['control ["JA1SCUCU57DVVWD2MF"]', ['JA1SCUCU57DVVWD2MF'], 'JA1SCUCU57DVVWD2MF33'], ['control ["FUNIAT1L7171F0KBF9"]', ['FUNIAT1L7171F0KBF9'], 'FUNIAT1L7171F0KBF963'], ['control ["Z62YQ0YUTHLSESKG4A"]', ['Z62YQ0YUTHLSESKG4A'], 'Z62YQ0YUTHLSESKG4A79']]]
for label, args, expected in fixtures[N - 1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression ["NH4O4Q9HMI8RUJ0D6Y"]NH4O4Q9HMI8RUJ0D6Y73NH4O4Q9HMI8RUJ0D6Y73Passed
regression ["9K6IWOG7TS4VC3SHAM"]9K6IWOG7TS4VC3SHAM789K6IWOG7TS4VC3SHAM78Passed
control ["5493001KJTIIGC8Y1"]NoneNonePassed
control ["5493001KJTIIGC8Y1R-"]NoneNonePassed
control ["000000000000000000"]0000000000000000009800000000000000000098Passed
control ["TD7FDXWKLVRV07ALBK"]TD7FDXWKLVRV07ALBK05TD7FDXWKLVRV07ALBK05Passed
control ["ACLPCCV3EGBW4QG3I6"]ACLPCCV3EGBW4QG3I685ACLPCCV3EGBW4QG3I685Passed
control ["64WI551TBNLAZEBU15"]64WI551TBNLAZEBU150264WI551TBNLAZEBU1502Passed

SHA-256 / e2fdaf2a565cdb31e6ef650e71fbf7a5601a08f5df08bd7286a941cebc064690

Verification & scope

A deterministic, bounded teaching model of the named scheme under the stated contract; not a certified validator. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.

Observations recorded using Python 3.12.14 at 2026-09-29T14:48:41.506380+00:00.

Case digest / a0a9c2f7883a8df8f88ae4cb3296353bf68c24c137d50a554b1bea6d0beb0b4b