FAILURE MAP
← Case archive

FA-72626 / Check-digit algorithms / Open access

MRZ rejects the filler check on an empty optional field · case 01

Passports with no optional data and a "<" check character report a bad optional check.

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

ROOT CAUSE

The rule allowing "<" as the check of an all-filler optional field is missing.

VERIFIED REPAIR

Accept "<" only when every optional-field character is filler; otherwise require the computed digit.

Unsuccessful approach: Accepting "<" regardless of the field content lets populated optional data skip its check.

Case contract

Machine-readable passport (TD3) second line, 44 characters of 0-9, A-Z and the filler "<" (else "malformed"). Check digits use weights 7,3,1 restarting per field, "<" = 0, A-Z = 10-35: document number [0:9] check [9]; birth date [13:19] check [19]; expiry [21:27] check [27]; optional data [28:42] check [42] (a "<" check is allowed only when the optional field is entirely filler); composite check [43] over [0:10]+[13:20]+[21:43]. Return five booleans.

Why this case matters

Border-control kiosks verify MRZ check digits to catch OCR misreads before a database query.

1 / The failure

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

N = 1
observations = []
def solve(line):
    def cd(field):
        total = 0
        for i, ch in enumerate(field):
            if ch == '<':
                v = 0
            elif ch.isdigit():
                v = int(ch)
            else:
                v = ord(ch) - 55
            total += v * (7, 3, 1)[i % 3]
        return str(total % 10)
    if len(line) != 44 or not line.isascii():
        return 'malformed'
    if any(not (c.isdigit() or 'A' <= c <= 'Z' or c == '<') for c in line):
        return 'malformed'
    opt_ok = line[42] == cd(line[28:42])
    comp = line[0:10] + line[13:20] + line[21:43]
    return [line[9] == cd(line[0:9]), line[19] == cd(line[13:19]), line[27] == cd(line[21:27]), opt_ok, line[43] == cd(comp)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression ["HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['regression ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [False, True, True, True, False]], ['partial-repair ["C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8"]', ['C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8'], [True, True, True, False, True]], ['partial-repair ["ZK81236<<1UTO6707079F280101612345678901234<3"]', ['ZK81236<<1UTO6707079F280101612345678901234<3'], [True, True, True, False, True]], ['control ["SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"]', ['SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14'], [True, True, True, True, True]], ['control ["S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"]', ['S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14'], [False, True, True, True, False]], ['control ["ZX2H4LT816UTO1612239F2305086AOX6HQ<<<<<<<<46"]', ['ZX2H4LT816UTO1612239F2305086AOX6HQ<<<<<<<<46'], [True, True, True, True, True]], ['control ["ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46"]', ['ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46'], [True, False, True, True, False]]], [['regression ["Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"]', ['Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2'], [False, True, True, True, False]], ['regression ["QQJKFSW<<6UTO2607034F2004079<<<<<<<<<<<<<<<0"]', ['QQJKFSW<<6UTO2607034F2004079<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['partial-repair ["ZK81236<<1UTO6707079F280101612345678901234<3"]', ['ZK81236<<1UTO6707079F280101612345678901234<3'], [True, True, True, False, True]], ['partial-repair ["C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8"]', ['C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8'], [True, True, True, False, True]], ['control ["WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00"]', ['WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00'], [True, True, False, True, False]], ['control ["6OGHJGP443UTO4305208F2401025ORMBRF<<<<<<<<40"]', ['6OGHJGP443UTO4305208F2401025ORMBRF<<<<<<<<40'], [True, True, True, True, True]], ['control ["6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40"]', ['6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40'], [True, False, True, True, False]], ['control ["A6OUR3Y<<4UTO3107232F3005017P9VLEN<<<<<<<<50"]', ['A6OUR3Y<<4UTO3107232F3005017P9VLEN<<<<<<<<50'], [True, True, True, True, True]]], [['regression ["HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['regression ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [False, True, True, True, False]], ['partial-repair ["C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8"]', ['C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8'], [True, True, True, False, True]], ['partial-repair ["ZK81236<<1UTO6707079F280101612345678901234<3"]', ['ZK81236<<1UTO6707079F280101612345678901234<3'], [True, True, True, False, True]], ['control ["IW9C4XZ762UTO4007096F2906025PS0IN0<<<<<<<<40"]', ['IW9C4XZ762UTO4007096F2906025PS0IN0<<<<<<<<40'], [True, True, True, True, True]], ['control ["7MZSP32754UTO7512054F33062086HKCM0<<<<<<<<36"]', ['7MZSP32754UTO7512054F33062086HKCM0<<<<<<<<36'], [True, True, True, True, True]], ['control ["T8AHLV5223UTO4905147F2401173<<<<<<<<<<<<<<02"]', ['T8AHLV5223UTO4905147F2401173<<<<<<<<<<<<<<02'], [True, True, True, True, True]], ['control ["L898902C36UTO7408122F1204159ZE184226B<<<<<10"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<<10'], [True, True, True, True, True]]], [['regression ["Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"]', ['Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2'], [False, True, True, True, False]], ['regression ["QQJKFSW<<6UTO2607034F2004079<<<<<<<<<<<<<<<0"]', ['QQJKFSW<<6UTO2607034F2004079<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['partial-repair ["ZK81236<<1UTO6707079F280101612345678901234<3"]', ['ZK81236<<1UTO6707079F280101612345678901234<3'], [True, True, True, False, True]], ['partial-repair ["C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8"]', ['C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8'], [True, True, True, False, True]], ['control ["L898902C36UTO7408122F1204159ZE184226B<<<<10"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<10'], 'malformed'], ['control ["l898902C36UTO7408122F1204159ZE184226B<<<<<10"]', ['l898902C36UTO7408122F1204159ZE184226B<<<<<10'], 'malformed'], ['control ["X<<<<<<<<1UTO0002299F2912316ABC<<<<<<<<<<<56"]', ['X<<<<<<<<1UTO0002299F2912316ABC<<<<<<<<<<<56'], [True, True, True, True, True]], ['control ["SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"]', ['SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14'], [True, True, True, True, True]]], [['regression ["HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['regression ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [False, True, True, True, False]], ['partial-repair ["C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8"]', ['C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8'], [True, True, True, False, True]], ['partial-repair ["ZK81236<<1UTO6707079F280101612345678901234<3"]', ['ZK81236<<1UTO6707079F280101612345678901234<3'], [True, True, True, False, True]], ['control ["ZX2H4LT816UTO1612239F2305086AOX6HQ<<<<<<<<46"]', ['ZX2H4LT816UTO1612239F2305086AOX6HQ<<<<<<<<46'], [True, True, True, True, True]], ['control ["ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46"]', ['ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46'], [True, False, True, True, False]], ['control ["WEXHJ2U<<7UTO6804200F3006184<<<<<<<<<<<<<<00"]', ['WEXHJ2U<<7UTO6804200F3006184<<<<<<<<<<<<<<00'], [True, True, True, True, True]], ['control ["WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00"]', ['WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00'], [True, True, False, True, False]]]]
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 ["HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"][True, True, True, False, True][True, True, True, True, True]Failed
regression ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"][False, True, True, False, False][False, True, True, True, False]Failed
partial-repair ["C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8"][True, True, True, False, True][True, True, True, False, True]Passed
partial-repair ["ZK81236<<1UTO6707079F280101612345678901234<3"][True, True, True, False, True][True, True, True, False, True]Passed
control ["SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"][True, True, True, True, True][True, True, True, True, True]Passed
control ["S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"][False, True, True, True, False][False, True, True, True, False]Passed
control ["ZX2H4LT816UTO1612239F2305086AOX6HQ<<<<<<<<46"][True, True, True, True, True][True, True, True, True, True]Passed
control ["ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46"][True, False, True, True, False][True, False, True, True, False]Passed

SHA-256 / a718b23ce62aaeaf4344832e8b0ca6d6600e4b5a6015de2415644a093d15663b

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(line):
    def cd(field):
        total = 0
        for i, ch in enumerate(field):
            if ch == '<':
                v = 0
            elif ch.isdigit():
                v = int(ch)
            else:
                v = ord(ch) - 55
            total += v * (7, 3, 1)[i % 3]
        return str(total % 10)
    if len(line) != 44 or not line.isascii():
        return 'malformed'
    if any(not (c.isdigit() or 'A' <= c <= 'Z' or c == '<') for c in line):
        return 'malformed'
    opt_ok = line[42] == cd(line[28:42]) or line[42] == '<'
    comp = line[0:10] + line[13:20] + line[21:43]
    return [line[9] == cd(line[0:9]), line[19] == cd(line[13:19]), line[27] == cd(line[21:27]), opt_ok, line[43] == cd(comp)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression ["HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['regression ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [False, True, True, True, False]], ['partial-repair ["C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8"]', ['C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8'], [True, True, True, False, True]], ['partial-repair ["ZK81236<<1UTO6707079F280101612345678901234<3"]', ['ZK81236<<1UTO6707079F280101612345678901234<3'], [True, True, True, False, True]], ['control ["SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"]', ['SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14'], [True, True, True, True, True]], ['control ["S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"]', ['S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14'], [False, True, True, True, False]], ['control ["ZX2H4LT816UTO1612239F2305086AOX6HQ<<<<<<<<46"]', ['ZX2H4LT816UTO1612239F2305086AOX6HQ<<<<<<<<46'], [True, True, True, True, True]], ['control ["ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46"]', ['ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46'], [True, False, True, True, False]]], [['regression ["Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"]', ['Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2'], [False, True, True, True, False]], ['regression ["QQJKFSW<<6UTO2607034F2004079<<<<<<<<<<<<<<<0"]', ['QQJKFSW<<6UTO2607034F2004079<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['partial-repair ["ZK81236<<1UTO6707079F280101612345678901234<3"]', ['ZK81236<<1UTO6707079F280101612345678901234<3'], [True, True, True, False, True]], ['partial-repair ["C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8"]', ['C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8'], [True, True, True, False, True]], ['control ["WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00"]', ['WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00'], [True, True, False, True, False]], ['control ["6OGHJGP443UTO4305208F2401025ORMBRF<<<<<<<<40"]', ['6OGHJGP443UTO4305208F2401025ORMBRF<<<<<<<<40'], [True, True, True, True, True]], ['control ["6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40"]', ['6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40'], [True, False, True, True, False]], ['control ["A6OUR3Y<<4UTO3107232F3005017P9VLEN<<<<<<<<50"]', ['A6OUR3Y<<4UTO3107232F3005017P9VLEN<<<<<<<<50'], [True, True, True, True, True]]], [['regression ["HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['regression ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [False, True, True, True, False]], ['partial-repair ["C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8"]', ['C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8'], [True, True, True, False, True]], ['partial-repair ["ZK81236<<1UTO6707079F280101612345678901234<3"]', ['ZK81236<<1UTO6707079F280101612345678901234<3'], [True, True, True, False, True]], ['control ["IW9C4XZ762UTO4007096F2906025PS0IN0<<<<<<<<40"]', ['IW9C4XZ762UTO4007096F2906025PS0IN0<<<<<<<<40'], [True, True, True, True, True]], ['control ["7MZSP32754UTO7512054F33062086HKCM0<<<<<<<<36"]', ['7MZSP32754UTO7512054F33062086HKCM0<<<<<<<<36'], [True, True, True, True, True]], ['control ["T8AHLV5223UTO4905147F2401173<<<<<<<<<<<<<<02"]', ['T8AHLV5223UTO4905147F2401173<<<<<<<<<<<<<<02'], [True, True, True, True, True]], ['control ["L898902C36UTO7408122F1204159ZE184226B<<<<<10"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<<10'], [True, True, True, True, True]]], [['regression ["Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"]', ['Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2'], [False, True, True, True, False]], ['regression ["QQJKFSW<<6UTO2607034F2004079<<<<<<<<<<<<<<<0"]', ['QQJKFSW<<6UTO2607034F2004079<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['partial-repair ["ZK81236<<1UTO6707079F280101612345678901234<3"]', ['ZK81236<<1UTO6707079F280101612345678901234<3'], [True, True, True, False, True]], ['partial-repair ["C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8"]', ['C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8'], [True, True, True, False, True]], ['control ["L898902C36UTO7408122F1204159ZE184226B<<<<10"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<10'], 'malformed'], ['control ["l898902C36UTO7408122F1204159ZE184226B<<<<<10"]', ['l898902C36UTO7408122F1204159ZE184226B<<<<<10'], 'malformed'], ['control ["X<<<<<<<<1UTO0002299F2912316ABC<<<<<<<<<<<56"]', ['X<<<<<<<<1UTO0002299F2912316ABC<<<<<<<<<<<56'], [True, True, True, True, True]], ['control ["SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"]', ['SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14'], [True, True, True, True, True]]], [['regression ["HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['regression ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [False, True, True, True, False]], ['partial-repair ["C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8"]', ['C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8'], [True, True, True, False, True]], ['partial-repair ["ZK81236<<1UTO6707079F280101612345678901234<3"]', ['ZK81236<<1UTO6707079F280101612345678901234<3'], [True, True, True, False, True]], ['control ["ZX2H4LT816UTO1612239F2305086AOX6HQ<<<<<<<<46"]', ['ZX2H4LT816UTO1612239F2305086AOX6HQ<<<<<<<<46'], [True, True, True, True, True]], ['control ["ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46"]', ['ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46'], [True, False, True, True, False]], ['control ["WEXHJ2U<<7UTO6804200F3006184<<<<<<<<<<<<<<00"]', ['WEXHJ2U<<7UTO6804200F3006184<<<<<<<<<<<<<<00'], [True, True, True, True, True]], ['control ["WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00"]', ['WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00'], [True, True, False, True, False]]]]
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 ["HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"][True, True, True, True, True][True, True, True, True, True]Passed
regression ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"][False, True, True, True, False][False, True, True, True, False]Passed
partial-repair ["C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8"][True, True, True, True, True][True, True, True, False, True]Failed
partial-repair ["ZK81236<<1UTO6707079F280101612345678901234<3"][True, True, True, True, True][True, True, True, False, True]Failed
control ["SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"][True, True, True, True, True][True, True, True, True, True]Passed
control ["S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"][False, True, True, True, False][False, True, True, True, False]Passed
control ["ZX2H4LT816UTO1612239F2305086AOX6HQ<<<<<<<<46"][True, True, True, True, True][True, True, True, True, True]Passed
control ["ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46"][True, False, True, True, False][True, False, True, True, False]Passed

SHA-256 / 773fb5a4f80ecb94adea7b96e9906657d18bd49aeee7a045c2a5d28d4282009a

3 / The verified repair

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

N = 1
observations = []
def solve(line):
    def cd(field):
        total = 0
        for i, ch in enumerate(field):
            if ch == '<':
                v = 0
            elif ch.isdigit():
                v = int(ch)
            else:
                v = ord(ch) - 55
            total += v * (7, 3, 1)[i % 3]
        return str(total % 10)
    if len(line) != 44 or not line.isascii():
        return 'malformed'
    if any(not (c.isdigit() or 'A' <= c <= 'Z' or c == '<') for c in line):
        return 'malformed'
    opt_ok = line[42] == cd(line[28:42]) or (line[42] == '<' and set(line[28:42]) == {'<'})
    comp = line[0:10] + line[13:20] + line[21:43]
    return [line[9] == cd(line[0:9]), line[19] == cd(line[13:19]), line[27] == cd(line[21:27]), opt_ok, line[43] == cd(comp)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression ["HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['regression ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [False, True, True, True, False]], ['partial-repair ["C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8"]', ['C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8'], [True, True, True, False, True]], ['partial-repair ["ZK81236<<1UTO6707079F280101612345678901234<3"]', ['ZK81236<<1UTO6707079F280101612345678901234<3'], [True, True, True, False, True]], ['control ["SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"]', ['SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14'], [True, True, True, True, True]], ['control ["S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"]', ['S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14'], [False, True, True, True, False]], ['control ["ZX2H4LT816UTO1612239F2305086AOX6HQ<<<<<<<<46"]', ['ZX2H4LT816UTO1612239F2305086AOX6HQ<<<<<<<<46'], [True, True, True, True, True]], ['control ["ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46"]', ['ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46'], [True, False, True, True, False]]], [['regression ["Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"]', ['Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2'], [False, True, True, True, False]], ['regression ["QQJKFSW<<6UTO2607034F2004079<<<<<<<<<<<<<<<0"]', ['QQJKFSW<<6UTO2607034F2004079<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['partial-repair ["ZK81236<<1UTO6707079F280101612345678901234<3"]', ['ZK81236<<1UTO6707079F280101612345678901234<3'], [True, True, True, False, True]], ['partial-repair ["C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8"]', ['C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8'], [True, True, True, False, True]], ['control ["WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00"]', ['WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00'], [True, True, False, True, False]], ['control ["6OGHJGP443UTO4305208F2401025ORMBRF<<<<<<<<40"]', ['6OGHJGP443UTO4305208F2401025ORMBRF<<<<<<<<40'], [True, True, True, True, True]], ['control ["6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40"]', ['6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40'], [True, False, True, True, False]], ['control ["A6OUR3Y<<4UTO3107232F3005017P9VLEN<<<<<<<<50"]', ['A6OUR3Y<<4UTO3107232F3005017P9VLEN<<<<<<<<50'], [True, True, True, True, True]]], [['regression ["HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['regression ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [False, True, True, True, False]], ['partial-repair ["C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8"]', ['C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8'], [True, True, True, False, True]], ['partial-repair ["ZK81236<<1UTO6707079F280101612345678901234<3"]', ['ZK81236<<1UTO6707079F280101612345678901234<3'], [True, True, True, False, True]], ['control ["IW9C4XZ762UTO4007096F2906025PS0IN0<<<<<<<<40"]', ['IW9C4XZ762UTO4007096F2906025PS0IN0<<<<<<<<40'], [True, True, True, True, True]], ['control ["7MZSP32754UTO7512054F33062086HKCM0<<<<<<<<36"]', ['7MZSP32754UTO7512054F33062086HKCM0<<<<<<<<36'], [True, True, True, True, True]], ['control ["T8AHLV5223UTO4905147F2401173<<<<<<<<<<<<<<02"]', ['T8AHLV5223UTO4905147F2401173<<<<<<<<<<<<<<02'], [True, True, True, True, True]], ['control ["L898902C36UTO7408122F1204159ZE184226B<<<<<10"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<<10'], [True, True, True, True, True]]], [['regression ["Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"]', ['Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2'], [False, True, True, True, False]], ['regression ["QQJKFSW<<6UTO2607034F2004079<<<<<<<<<<<<<<<0"]', ['QQJKFSW<<6UTO2607034F2004079<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['partial-repair ["ZK81236<<1UTO6707079F280101612345678901234<3"]', ['ZK81236<<1UTO6707079F280101612345678901234<3'], [True, True, True, False, True]], ['partial-repair ["C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8"]', ['C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8'], [True, True, True, False, True]], ['control ["L898902C36UTO7408122F1204159ZE184226B<<<<10"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<10'], 'malformed'], ['control ["l898902C36UTO7408122F1204159ZE184226B<<<<<10"]', ['l898902C36UTO7408122F1204159ZE184226B<<<<<10'], 'malformed'], ['control ["X<<<<<<<<1UTO0002299F2912316ABC<<<<<<<<<<<56"]', ['X<<<<<<<<1UTO0002299F2912316ABC<<<<<<<<<<<56'], [True, True, True, True, True]], ['control ["SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"]', ['SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14'], [True, True, True, True, True]]], [['regression ["HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['regression ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [False, True, True, True, False]], ['partial-repair ["C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8"]', ['C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8'], [True, True, True, False, True]], ['partial-repair ["ZK81236<<1UTO6707079F280101612345678901234<3"]', ['ZK81236<<1UTO6707079F280101612345678901234<3'], [True, True, True, False, True]], ['control ["ZX2H4LT816UTO1612239F2305086AOX6HQ<<<<<<<<46"]', ['ZX2H4LT816UTO1612239F2305086AOX6HQ<<<<<<<<46'], [True, True, True, True, True]], ['control ["ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46"]', ['ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46'], [True, False, True, True, False]], ['control ["WEXHJ2U<<7UTO6804200F3006184<<<<<<<<<<<<<<00"]', ['WEXHJ2U<<7UTO6804200F3006184<<<<<<<<<<<<<<00'], [True, True, True, True, True]], ['control ["WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00"]', ['WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00'], [True, True, False, True, False]]]]
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 ["HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"][True, True, True, True, True][True, True, True, True, True]Passed
regression ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"][False, True, True, True, False][False, True, True, True, False]Passed
partial-repair ["C0000001<7UTO9111303F3106305PX77<<<<<<<<<<<8"][True, True, True, False, True][True, True, True, False, True]Passed
partial-repair ["ZK81236<<1UTO6707079F280101612345678901234<3"][True, True, True, False, True][True, True, True, False, True]Passed
control ["SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"][True, True, True, True, True][True, True, True, True, True]Passed
control ["S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"][False, True, True, True, False][False, True, True, True, False]Passed
control ["ZX2H4LT816UTO1612239F2305086AOX6HQ<<<<<<<<46"][True, True, True, True, True][True, True, True, True, True]Passed
control ["ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46"][True, False, True, True, False][True, False, True, True, False]Passed

SHA-256 / 97c3d46835504d7471bc8f1726844bae859bf1a88f28377dfd27615a42c3142b

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:40.232368+00:00.

Case digest / ab5002d6c0994207af26c71bf2e6bdf923302e8b1ece68f1af4425be69de9273