FAILURE MAP
← Case archive

FA-72621 / Check-digit algorithms / Open access

MRZ composite check omits the field check digits · case 01

The composite (final) check digit fails on valid passports.

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

ROOT CAUSE

The composite string concatenates only data fields, leaving out the per-field check digits it must cover.

VERIFIED REPAIR

Use line[0:10] + line[13:20] + line[21:43], including each field check digit.

Unsuccessful approach: Including nationality and sex (a contiguous [0:20] + [21:43]) adds characters the composite excludes.

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]) or (line[42] == '<' and set(line[28:42]) == {'<'})
    comp = line[0:9] + line[13:19] + line[21:27] + line[28:42]
    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 ["SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"]', ['SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14'], [True, True, True, True, True]], ['regression ["HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['control ["S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"]', ['S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14'], [False, True, True, True, False]], ['control ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [False, True, True, True, False]], ['control ["ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46"]', ['ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46'], [True, False, True, True, False]], ['control ["WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00"]', ['WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00'], [True, True, False, True, False]], ['control ["6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40"]', ['6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40'], [True, False, True, True, False]], ['control ["Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"]', ['Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2'], [False, True, True, True, False]]], [['regression ["WEXHJ2U<<7UTO6804200F3006184<<<<<<<<<<<<<<00"]', ['WEXHJ2U<<7UTO6804200F3006184<<<<<<<<<<<<<<00'], [True, True, True, True, True]], ['regression ["ZI4II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"]', ['ZI4II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2'], [True, True, True, True, True]], ['partial-repair ["6OGHJGP443UTO4305208F2401025ORMBRF<<<<<<<<40"]', ['6OGHJGP443UTO4305208F2401025ORMBRF<<<<<<<<40'], [True, True, True, True, True]], ['control ["Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"]', ['Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2'], [False, True, True, True, False]], ['control ["L898902C36UTO7408122F1204159ZE184226B<<<<<11"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<<11'], [True, True, True, True, False]], ['control ["L898902C36UTO7408122F1204159ZE184226B<<<<10"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<10'], 'malformed'], ['control ["l898902C36UTO7408122F1204159ZE184226B<<<<<10"]', ['l898902C36UTO7408122F1204159ZE184226B<<<<<10'], 'malformed'], ['control ["S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"]', ['S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14'], [False, True, True, True, False]]], [['regression ["ORO5E0T416UTO4006240F2711221<<<<<<<<<<<<<<04"]', ['ORO5E0T416UTO4006240F2711221<<<<<<<<<<<<<<04'], [True, True, True, True, True]], ['regression ["IW9C4XZ762UTO4007096F2906025PS0IN0<<<<<<<<40"]', ['IW9C4XZ762UTO4007096F2906025PS0IN0<<<<<<<<40'], [True, True, True, True, True]], ['partial-repair ["A6OUR3Y<<4UTO3107232F3005017P9VLEN<<<<<<<<50"]', ['A6OUR3Y<<4UTO3107232F3005017P9VLEN<<<<<<<<50'], [True, True, True, True, True]], ['control ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [False, True, True, True, False]], ['control ["ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46"]', ['ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46'], [True, False, True, True, False]], ['control ["WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00"]', ['WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00'], [True, True, False, True, False]], ['control ["6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40"]', ['6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40'], [True, False, True, True, False]], ['control ["Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"]', ['Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2'], [False, True, True, True, False]]], [['regression ["7MZSP32754UTO7512054F33062086HKCM0<<<<<<<<36"]', ['7MZSP32754UTO7512054F33062086HKCM0<<<<<<<<36'], [True, True, True, True, True]], ['regression ["T8AHLV5223UTO4905147F2401173<<<<<<<<<<<<<<02"]', ['T8AHLV5223UTO4905147F2401173<<<<<<<<<<<<<<02'], [True, True, True, True, True]], ['partial-repair ["QQJKFSW<<6UTO2607034F2004079<<<<<<<<<<<<<<<0"]', ['QQJKFSW<<6UTO2607034F2004079<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['control ["L898902C36UTO7408122F1204159ZE184226B<<<<<11"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<<11'], [True, True, True, True, False]], ['control ["L898902C36UTO7408122F1204159ZE184226B<<<<10"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<10'], 'malformed'], ['control ["l898902C36UTO7408122F1204159ZE184226B<<<<<10"]', ['l898902C36UTO7408122F1204159ZE184226B<<<<<10'], 'malformed'], ['control ["S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"]', ['S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14'], [False, True, True, True, False]], ['control ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [False, True, True, True, False]]], [['regression ["AB1234<<<1UTO8501019F3001019<<<<<<<<<<<<<<<0"]', ['AB1234<<<1UTO8501019F3001019<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['regression ["X<<<<<<<<1UTO0002299F2912316ABC<<<<<<<<<<<56"]', ['X<<<<<<<<1UTO0002299F2912316ABC<<<<<<<<<<<56'], [True, True, True, True, True]], ['partial-repair ["L898902C36UTO7408122F1204159ZE184226B<<<<<10"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<<10'], [True, True, True, True, True]], ['control ["ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46"]', ['ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46'], [True, False, True, True, False]], ['control ["WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00"]', ['WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00'], [True, True, False, True, False]], ['control ["6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40"]', ['6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40'], [True, False, True, True, False]], ['control ["Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"]', ['Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2'], [False, True, True, True, False]], ['control ["L898902C36UTO7408122F1204159ZE184226B<<<<<11"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<<11'], [True, True, True, 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 ["SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"][True, True, True, True, False][True, True, True, True, True]Failed
regression ["HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"][True, True, True, True, False][True, True, True, True, True]Failed
control ["S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"][False, True, True, True, False][False, True, True, True, False]Passed
control ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"][False, True, True, True, False][False, True, True, True, False]Passed
control ["ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46"][True, False, True, True, False][True, False, True, True, False]Passed
control ["WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00"][True, True, False, True, False][True, True, False, True, False]Passed
control ["6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40"][True, False, True, True, False][True, False, True, True, False]Passed
control ["Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"][False, True, True, True, False][False, True, True, True, False]Passed

SHA-256 / ba8295e98d9c8a7c6750fa6453a9742e4ac93245cebd02a64b635e73e19e4b92

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] == '<' and set(line[28:42]) == {'<'})
    comp = line[0: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 ["SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"]', ['SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14'], [True, True, True, True, True]], ['regression ["HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['control ["S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"]', ['S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14'], [False, True, True, True, False]], ['control ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [False, True, True, True, False]], ['control ["ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46"]', ['ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46'], [True, False, True, True, False]], ['control ["WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00"]', ['WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00'], [True, True, False, True, False]], ['control ["6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40"]', ['6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40'], [True, False, True, True, False]], ['control ["Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"]', ['Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2'], [False, True, True, True, False]]], [['regression ["WEXHJ2U<<7UTO6804200F3006184<<<<<<<<<<<<<<00"]', ['WEXHJ2U<<7UTO6804200F3006184<<<<<<<<<<<<<<00'], [True, True, True, True, True]], ['regression ["ZI4II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"]', ['ZI4II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2'], [True, True, True, True, True]], ['partial-repair ["6OGHJGP443UTO4305208F2401025ORMBRF<<<<<<<<40"]', ['6OGHJGP443UTO4305208F2401025ORMBRF<<<<<<<<40'], [True, True, True, True, True]], ['control ["Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"]', ['Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2'], [False, True, True, True, False]], ['control ["L898902C36UTO7408122F1204159ZE184226B<<<<<11"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<<11'], [True, True, True, True, False]], ['control ["L898902C36UTO7408122F1204159ZE184226B<<<<10"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<10'], 'malformed'], ['control ["l898902C36UTO7408122F1204159ZE184226B<<<<<10"]', ['l898902C36UTO7408122F1204159ZE184226B<<<<<10'], 'malformed'], ['control ["S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"]', ['S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14'], [False, True, True, True, False]]], [['regression ["ORO5E0T416UTO4006240F2711221<<<<<<<<<<<<<<04"]', ['ORO5E0T416UTO4006240F2711221<<<<<<<<<<<<<<04'], [True, True, True, True, True]], ['regression ["IW9C4XZ762UTO4007096F2906025PS0IN0<<<<<<<<40"]', ['IW9C4XZ762UTO4007096F2906025PS0IN0<<<<<<<<40'], [True, True, True, True, True]], ['partial-repair ["A6OUR3Y<<4UTO3107232F3005017P9VLEN<<<<<<<<50"]', ['A6OUR3Y<<4UTO3107232F3005017P9VLEN<<<<<<<<50'], [True, True, True, True, True]], ['control ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [False, True, True, True, False]], ['control ["ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46"]', ['ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46'], [True, False, True, True, False]], ['control ["WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00"]', ['WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00'], [True, True, False, True, False]], ['control ["6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40"]', ['6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40'], [True, False, True, True, False]], ['control ["Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"]', ['Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2'], [False, True, True, True, False]]], [['regression ["7MZSP32754UTO7512054F33062086HKCM0<<<<<<<<36"]', ['7MZSP32754UTO7512054F33062086HKCM0<<<<<<<<36'], [True, True, True, True, True]], ['regression ["T8AHLV5223UTO4905147F2401173<<<<<<<<<<<<<<02"]', ['T8AHLV5223UTO4905147F2401173<<<<<<<<<<<<<<02'], [True, True, True, True, True]], ['partial-repair ["QQJKFSW<<6UTO2607034F2004079<<<<<<<<<<<<<<<0"]', ['QQJKFSW<<6UTO2607034F2004079<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['control ["L898902C36UTO7408122F1204159ZE184226B<<<<<11"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<<11'], [True, True, True, True, False]], ['control ["L898902C36UTO7408122F1204159ZE184226B<<<<10"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<10'], 'malformed'], ['control ["l898902C36UTO7408122F1204159ZE184226B<<<<<10"]', ['l898902C36UTO7408122F1204159ZE184226B<<<<<10'], 'malformed'], ['control ["S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"]', ['S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14'], [False, True, True, True, False]], ['control ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [False, True, True, True, False]]], [['regression ["AB1234<<<1UTO8501019F3001019<<<<<<<<<<<<<<<0"]', ['AB1234<<<1UTO8501019F3001019<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['regression ["X<<<<<<<<1UTO0002299F2912316ABC<<<<<<<<<<<56"]', ['X<<<<<<<<1UTO0002299F2912316ABC<<<<<<<<<<<56'], [True, True, True, True, True]], ['partial-repair ["L898902C36UTO7408122F1204159ZE184226B<<<<<10"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<<10'], [True, True, True, True, True]], ['control ["ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46"]', ['ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46'], [True, False, True, True, False]], ['control ["WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00"]', ['WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00'], [True, True, False, True, False]], ['control ["6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40"]', ['6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40'], [True, False, True, True, False]], ['control ["Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"]', ['Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2'], [False, True, True, True, False]], ['control ["L898902C36UTO7408122F1204159ZE184226B<<<<<11"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<<11'], [True, True, True, 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 ["SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"][True, True, True, True, False][True, True, True, True, True]Failed
regression ["HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"][True, True, True, True, False][True, True, True, True, True]Failed
control ["S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"][False, True, True, True, False][False, True, True, True, False]Passed
control ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"][False, True, True, True, False][False, True, True, True, False]Passed
control ["ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46"][True, False, True, True, False][True, False, True, True, False]Passed
control ["WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00"][True, True, False, True, False][True, True, False, True, False]Passed
control ["6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40"][True, False, True, True, False][True, False, True, True, False]Passed
control ["Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"][False, True, True, True, False][False, True, True, True, False]Passed

SHA-256 / cc21e8fed1ca55f3c119e72b0af2871b99e4b46c67fe7aba9377a73684ab8942

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 ["SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"]', ['SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14'], [True, True, True, True, True]], ['regression ["HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['control ["S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"]', ['S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14'], [False, True, True, True, False]], ['control ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [False, True, True, True, False]], ['control ["ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46"]', ['ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46'], [True, False, True, True, False]], ['control ["WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00"]', ['WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00'], [True, True, False, True, False]], ['control ["6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40"]', ['6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40'], [True, False, True, True, False]], ['control ["Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"]', ['Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2'], [False, True, True, True, False]]], [['regression ["WEXHJ2U<<7UTO6804200F3006184<<<<<<<<<<<<<<00"]', ['WEXHJ2U<<7UTO6804200F3006184<<<<<<<<<<<<<<00'], [True, True, True, True, True]], ['regression ["ZI4II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"]', ['ZI4II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2'], [True, True, True, True, True]], ['partial-repair ["6OGHJGP443UTO4305208F2401025ORMBRF<<<<<<<<40"]', ['6OGHJGP443UTO4305208F2401025ORMBRF<<<<<<<<40'], [True, True, True, True, True]], ['control ["Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"]', ['Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2'], [False, True, True, True, False]], ['control ["L898902C36UTO7408122F1204159ZE184226B<<<<<11"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<<11'], [True, True, True, True, False]], ['control ["L898902C36UTO7408122F1204159ZE184226B<<<<10"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<10'], 'malformed'], ['control ["l898902C36UTO7408122F1204159ZE184226B<<<<<10"]', ['l898902C36UTO7408122F1204159ZE184226B<<<<<10'], 'malformed'], ['control ["S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"]', ['S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14'], [False, True, True, True, False]]], [['regression ["ORO5E0T416UTO4006240F2711221<<<<<<<<<<<<<<04"]', ['ORO5E0T416UTO4006240F2711221<<<<<<<<<<<<<<04'], [True, True, True, True, True]], ['regression ["IW9C4XZ762UTO4007096F2906025PS0IN0<<<<<<<<40"]', ['IW9C4XZ762UTO4007096F2906025PS0IN0<<<<<<<<40'], [True, True, True, True, True]], ['partial-repair ["A6OUR3Y<<4UTO3107232F3005017P9VLEN<<<<<<<<50"]', ['A6OUR3Y<<4UTO3107232F3005017P9VLEN<<<<<<<<50'], [True, True, True, True, True]], ['control ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [False, True, True, True, False]], ['control ["ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46"]', ['ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46'], [True, False, True, True, False]], ['control ["WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00"]', ['WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00'], [True, True, False, True, False]], ['control ["6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40"]', ['6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40'], [True, False, True, True, False]], ['control ["Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"]', ['Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2'], [False, True, True, True, False]]], [['regression ["7MZSP32754UTO7512054F33062086HKCM0<<<<<<<<36"]', ['7MZSP32754UTO7512054F33062086HKCM0<<<<<<<<36'], [True, True, True, True, True]], ['regression ["T8AHLV5223UTO4905147F2401173<<<<<<<<<<<<<<02"]', ['T8AHLV5223UTO4905147F2401173<<<<<<<<<<<<<<02'], [True, True, True, True, True]], ['partial-repair ["QQJKFSW<<6UTO2607034F2004079<<<<<<<<<<<<<<<0"]', ['QQJKFSW<<6UTO2607034F2004079<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['control ["L898902C36UTO7408122F1204159ZE184226B<<<<<11"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<<11'], [True, True, True, True, False]], ['control ["L898902C36UTO7408122F1204159ZE184226B<<<<10"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<10'], 'malformed'], ['control ["l898902C36UTO7408122F1204159ZE184226B<<<<<10"]', ['l898902C36UTO7408122F1204159ZE184226B<<<<<10'], 'malformed'], ['control ["S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"]', ['S75TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14'], [False, True, True, True, False]], ['control ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"]', ['HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0'], [False, True, True, True, False]]], [['regression ["AB1234<<<1UTO8501019F3001019<<<<<<<<<<<<<<<0"]', ['AB1234<<<1UTO8501019F3001019<<<<<<<<<<<<<<<0'], [True, True, True, True, True]], ['regression ["X<<<<<<<<1UTO0002299F2912316ABC<<<<<<<<<<<56"]', ['X<<<<<<<<1UTO0002299F2912316ABC<<<<<<<<<<<56'], [True, True, True, True, True]], ['partial-repair ["L898902C36UTO7408122F1204159ZE184226B<<<<<10"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<<10'], [True, True, True, True, True]], ['control ["ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46"]', ['ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46'], [True, False, True, True, False]], ['control ["WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00"]', ['WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00'], [True, True, False, True, False]], ['control ["6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40"]', ['6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40'], [True, False, True, True, False]], ['control ["Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"]', ['Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2'], [False, True, True, True, False]], ['control ["L898902C36UTO7408122F1204159ZE184226B<<<<<11"]', ['L898902C36UTO7408122F1204159ZE184226B<<<<<11'], [True, True, True, 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 ["SK5TG49<<9UTO2004046F2210193O66P4C<<<<<<<<14"][True, True, True, True, True][True, True, True, True, True]Passed
regression ["HM87YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"][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 ["HM77YWD225UTO1907195F3112216<<<<<<<<<<<<<<<0"][False, True, True, True, False][False, True, True, True, False]Passed
control ["ZX2H4LT816UTO1712239F2305086AOX6HQ<<<<<<<<46"][True, False, True, True, False][True, False, True, True, False]Passed
control ["WEXHJ2U<<7UTO6804200F3706184<<<<<<<<<<<<<<00"][True, True, False, True, False][True, True, False, True, False]Passed
control ["6OGHJGP443UTO7305208F2401025ORMBRF<<<<<<<<40"][True, False, True, True, False][True, False, True, True, False]Passed
control ["Z74II1W798UTO2103259F3311282<<<<<<<<<<<<<<<2"][False, True, True, True, False][False, True, True, True, False]Passed

SHA-256 / 4e3b80878ce50ddf4bc1f8f67f4164ce30bbf49a37b461dfe825bcd384250707

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

Case digest / f799d98b1181790abf317bb8e915da1fe61ccb83e01b9ca405658be3f7f0b32c