{"abstract":"Numbers containing reflections produce wrong check digits.","category":"Check-digit algorithms","checks":8,"contract":"Verhoeff dihedral-group scheme. mode \"generate\" returns the check digit for a nonempty ASCII digit payload; mode \"validate\" returns whether a nonempty digit string ending in its check digit is correct. Digits are processed from the right with permutation P[(i + offset) % 8], offset 1 when generating and 0 when validating; the check digit is the dihedral inverse of the final state. Empty or non-digit input returns None.","evaluation_group":"w2-check_digit_algorithms-verhoeff","failed_approach":"Transposing the permutation lookup (P[digit % 8][pos % 10]) keeps the product order but uses the wrong permutation.","family":"w2-check_digit_algorithms-verhoeff-operand-order","id":"FA-72401","implementations":{"attempt":{"sha256":"489c64112599b9951df2c560b41ea154b67e33c25a97ca606bee241a82dc989b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s, mode):\n    D = [[0,1,2,3,4,5,6,7,8,9],[1,2,3,4,0,6,7,8,9,5],[2,3,4,0,1,7,8,9,5,6],[3,4,0,1,2,8,9,5,6,7],[4,0,1,2,3,9,5,6,7,8],[5,9,8,7,6,0,4,3,2,1],[6,5,9,8,7,1,0,4,3,2],[7,6,5,9,8,2,1,0,4,3],[8,7,6,5,9,3,2,1,0,4],[9,8,7,6,5,4,3,2,1,0]]\n    P = [[0,1,2,3,4,5,6,7,8,9],[1,5,7,6,2,8,3,0,9,4],[5,8,0,3,7,9,6,1,4,2],[8,9,1,6,0,4,3,5,2,7],[9,4,5,3,1,2,8,7,6,0],[4,2,8,6,5,7,3,9,0,1],[2,7,9,3,8,0,6,4,1,5],[7,0,4,6,9,1,3,2,5,8]]\n    INV = [0,4,3,2,1,5,6,7,8,9]\n    if not s or not s.isascii() or not s.isdigit():\n        return None\n    offset = 1 if mode == 'generate' else 0\n    c = 0\n    for i, ch in enumerate(reversed(s)):\n        c = D[c][P[int(ch) % 8][(i + offset) % 10]]\n    if mode == 'generate':\n        return INV[c]\n    return c == 0\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"12\", \"generate\"]', ['12', 'generate'], 1], ['regression [\"600\", \"generate\"]', ['600', 'generate'], 8], ['control [\"7\", \"generate\"]', ['7', 'generate'], 0], ['control [\"73\", \"validate\"]', ['73', 'validate'], False], ['control [\"123\", \"validate\"]', ['123', 'validate'], False], ['control [\"6001\", \"validate\"]', ['6001', 'validate'], False], ['control [\"317230\", \"validate\"]', ['317230', 'validate'], False], ['control [\"2864257569\", \"validate\"]', ['2864257569', 'validate'], False]], [['regression [\"42668879332\", \"generate\"]', ['42668879332', 'generate'], 9], ['regression [\"811566955164\", \"generate\"]', ['811566955164', 'generate'], 9], ['partial-repair [\"07668886\", \"generate\"]', ['07668886', 'generate'], 2], ['partial-repair [\"076688867\", \"validate\"]', ['076688867', 'validate'], False], ['control [\"2864257569\", \"validate\"]', ['2864257569', 'validate'], False], ['control [\"426688793324\", \"validate\"]', ['426688793324', 'validate'], False], ['control [\"8115669551647\", \"validate\"]', ['8115669551647', 'validate'], False], ['control [\"6516456313406690\", \"validate\"]', ['6516456313406690', 'validate'], False]], [['regression [\"12345\", \"generate\"]', ['12345', 'generate'], 1], ['regression [\"123451\", \"validate\"]', ['123451', 'validate'], True], ['partial-repair [\"42668879332\", \"generate\"]', ['42668879332', 'generate'], 9], ['partial-repair [\"811566955164\", \"generate\"]', ['811566955164', 'generate'], 9], ['control [\"2364\", \"validate\"]', ['2364', 'validate'], False], ['control [\"\", \"generate\"]', ['', 'generate'], None], ['control [\"\", \"validate\"]', ['', 'validate'], None], ['control [\"12a\", \"generate\"]', ['12a', 'generate'], None]], [['regression [\"1428570\", \"validate\"]', ['1428570', 'validate'], True], ['regression [\"84736430954837284567892\", \"generate\"]', ['84736430954837284567892', 'generate'], 2], ['partial-repair [\"236\", \"generate\"]', ['236', 'generate'], 3], ['partial-repair [\"12345\", \"generate\"]', ['12345', 'generate'], 1], ['control [\"0\", \"validate\"]', ['0', 'validate'], True], ['control [\"1428572\", \"validate\"]', ['1428572', 'validate'], False], ['control [\"7\", \"generate\"]', ['7', 'generate'], 0], ['control [\"73\", \"validate\"]', ['73', 'validate'], False]], [['regression [\"600\", \"generate\"]', ['600', 'generate'], 8], ['regression [\"31723\", \"generate\"]', ['31723', 'generate'], 6], ['partial-repair [\"142857\", \"generate\"]', ['142857', 'generate'], 0], ['partial-repair [\"1428570\", \"validate\"]', ['1428570', 'validate'], True], ['control [\"6001\", \"validate\"]', ['6001', 'validate'], False], ['control [\"317230\", \"validate\"]', ['317230', 'validate'], False], ['control [\"2864257569\", \"validate\"]', ['2864257569', 'validate'], False], ['control [\"426688793324\", \"validate\"]', ['426688793324', 'validate'], False]]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"ff742e016f5b81183d88cb057818505cee809f9cf1a594c3f6da28a7f3c736bb","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s, mode):\n    D = [[0,1,2,3,4,5,6,7,8,9],[1,2,3,4,0,6,7,8,9,5],[2,3,4,0,1,7,8,9,5,6],[3,4,0,1,2,8,9,5,6,7],[4,0,1,2,3,9,5,6,7,8],[5,9,8,7,6,0,4,3,2,1],[6,5,9,8,7,1,0,4,3,2],[7,6,5,9,8,2,1,0,4,3],[8,7,6,5,9,3,2,1,0,4],[9,8,7,6,5,4,3,2,1,0]]\n    P = [[0,1,2,3,4,5,6,7,8,9],[1,5,7,6,2,8,3,0,9,4],[5,8,0,3,7,9,6,1,4,2],[8,9,1,6,0,4,3,5,2,7],[9,4,5,3,1,2,8,7,6,0],[4,2,8,6,5,7,3,9,0,1],[2,7,9,3,8,0,6,4,1,5],[7,0,4,6,9,1,3,2,5,8]]\n    INV = [0,4,3,2,1,5,6,7,8,9]\n    if not s or not s.isascii() or not s.isdigit():\n        return None\n    offset = 1 if mode == 'generate' else 0\n    c = 0\n    for i, ch in enumerate(reversed(s)):\n        c = D[P[(i + offset) % 8][int(ch)]][c]\n    if mode == 'generate':\n        return INV[c]\n    return c == 0\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"12\", \"generate\"]', ['12', 'generate'], 1], ['regression [\"600\", \"generate\"]', ['600', 'generate'], 8], ['control [\"7\", \"generate\"]', ['7', 'generate'], 0], ['control [\"73\", \"validate\"]', ['73', 'validate'], False], ['control [\"123\", \"validate\"]', ['123', 'validate'], False], ['control [\"6001\", \"validate\"]', ['6001', 'validate'], False], ['control [\"317230\", \"validate\"]', ['317230', 'validate'], False], ['control [\"2864257569\", \"validate\"]', ['2864257569', 'validate'], False]], [['regression [\"42668879332\", \"generate\"]', ['42668879332', 'generate'], 9], ['regression [\"811566955164\", \"generate\"]', ['811566955164', 'generate'], 9], ['partial-repair [\"07668886\", \"generate\"]', ['07668886', 'generate'], 2], ['partial-repair [\"076688867\", \"validate\"]', ['076688867', 'validate'], False], ['control [\"2864257569\", \"validate\"]', ['2864257569', 'validate'], False], ['control [\"426688793324\", \"validate\"]', ['426688793324', 'validate'], False], ['control [\"8115669551647\", \"validate\"]', ['8115669551647', 'validate'], False], ['control [\"6516456313406690\", \"validate\"]', ['6516456313406690', 'validate'], False]], [['regression [\"12345\", \"generate\"]', ['12345', 'generate'], 1], ['regression [\"123451\", \"validate\"]', ['123451', 'validate'], True], ['partial-repair [\"42668879332\", \"generate\"]', ['42668879332', 'generate'], 9], ['partial-repair [\"811566955164\", \"generate\"]', ['811566955164', 'generate'], 9], ['control [\"2364\", \"validate\"]', ['2364', 'validate'], False], ['control [\"\", \"generate\"]', ['', 'generate'], None], ['control [\"\", \"validate\"]', ['', 'validate'], None], ['control [\"12a\", \"generate\"]', ['12a', 'generate'], None]], [['regression [\"1428570\", \"validate\"]', ['1428570', 'validate'], True], ['regression [\"84736430954837284567892\", \"generate\"]', ['84736430954837284567892', 'generate'], 2], ['partial-repair [\"236\", \"generate\"]', ['236', 'generate'], 3], ['partial-repair [\"12345\", \"generate\"]', ['12345', 'generate'], 1], ['control [\"0\", \"validate\"]', ['0', 'validate'], True], ['control [\"1428572\", \"validate\"]', ['1428572', 'validate'], False], ['control [\"7\", \"generate\"]', ['7', 'generate'], 0], ['control [\"73\", \"validate\"]', ['73', 'validate'], False]], [['regression [\"600\", \"generate\"]', ['600', 'generate'], 8], ['regression [\"31723\", \"generate\"]', ['31723', 'generate'], 6], ['partial-repair [\"142857\", \"generate\"]', ['142857', 'generate'], 0], ['partial-repair [\"1428570\", \"validate\"]', ['1428570', 'validate'], True], ['control [\"6001\", \"validate\"]', ['6001', 'validate'], False], ['control [\"317230\", \"validate\"]', ['317230', 'validate'], False], ['control [\"2864257569\", \"validate\"]', ['2864257569', 'validate'], False], ['control [\"426688793324\", \"validate\"]', ['426688793324', 'validate'], False]]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"b4479882c226cce6423fd47f9e931be37aab38bd8350e3781bcabc32dddebfa9","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s, mode):\n    D = [[0,1,2,3,4,5,6,7,8,9],[1,2,3,4,0,6,7,8,9,5],[2,3,4,0,1,7,8,9,5,6],[3,4,0,1,2,8,9,5,6,7],[4,0,1,2,3,9,5,6,7,8],[5,9,8,7,6,0,4,3,2,1],[6,5,9,8,7,1,0,4,3,2],[7,6,5,9,8,2,1,0,4,3],[8,7,6,5,9,3,2,1,0,4],[9,8,7,6,5,4,3,2,1,0]]\n    P = [[0,1,2,3,4,5,6,7,8,9],[1,5,7,6,2,8,3,0,9,4],[5,8,0,3,7,9,6,1,4,2],[8,9,1,6,0,4,3,5,2,7],[9,4,5,3,1,2,8,7,6,0],[4,2,8,6,5,7,3,9,0,1],[2,7,9,3,8,0,6,4,1,5],[7,0,4,6,9,1,3,2,5,8]]\n    INV = [0,4,3,2,1,5,6,7,8,9]\n    if not s or not s.isascii() or not s.isdigit():\n        return None\n    offset = 1 if mode == 'generate' else 0\n    c = 0\n    for i, ch in enumerate(reversed(s)):\n        c = D[c][P[(i + offset) % 8][int(ch)]]\n    if mode == 'generate':\n        return INV[c]\n    return c == 0\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"12\", \"generate\"]', ['12', 'generate'], 1], ['regression [\"600\", \"generate\"]', ['600', 'generate'], 8], ['control [\"7\", \"generate\"]', ['7', 'generate'], 0], ['control [\"73\", \"validate\"]', ['73', 'validate'], False], ['control [\"123\", \"validate\"]', ['123', 'validate'], False], ['control [\"6001\", \"validate\"]', ['6001', 'validate'], False], ['control [\"317230\", \"validate\"]', ['317230', 'validate'], False], ['control [\"2864257569\", \"validate\"]', ['2864257569', 'validate'], False]], [['regression [\"42668879332\", \"generate\"]', ['42668879332', 'generate'], 9], ['regression [\"811566955164\", \"generate\"]', ['811566955164', 'generate'], 9], ['partial-repair [\"07668886\", \"generate\"]', ['07668886', 'generate'], 2], ['partial-repair [\"076688867\", \"validate\"]', ['076688867', 'validate'], False], ['control [\"2864257569\", \"validate\"]', ['2864257569', 'validate'], False], ['control [\"426688793324\", \"validate\"]', ['426688793324', 'validate'], False], ['control [\"8115669551647\", \"validate\"]', ['8115669551647', 'validate'], False], ['control [\"6516456313406690\", \"validate\"]', ['6516456313406690', 'validate'], False]], [['regression [\"12345\", \"generate\"]', ['12345', 'generate'], 1], ['regression [\"123451\", \"validate\"]', ['123451', 'validate'], True], ['partial-repair [\"42668879332\", \"generate\"]', ['42668879332', 'generate'], 9], ['partial-repair [\"811566955164\", \"generate\"]', ['811566955164', 'generate'], 9], ['control [\"2364\", \"validate\"]', ['2364', 'validate'], False], ['control [\"\", \"generate\"]', ['', 'generate'], None], ['control [\"\", \"validate\"]', ['', 'validate'], None], ['control [\"12a\", \"generate\"]', ['12a', 'generate'], None]], [['regression [\"1428570\", \"validate\"]', ['1428570', 'validate'], True], ['regression [\"84736430954837284567892\", \"generate\"]', ['84736430954837284567892', 'generate'], 2], ['partial-repair [\"236\", \"generate\"]', ['236', 'generate'], 3], ['partial-repair [\"12345\", \"generate\"]', ['12345', 'generate'], 1], ['control [\"0\", \"validate\"]', ['0', 'validate'], True], ['control [\"1428572\", \"validate\"]', ['1428572', 'validate'], False], ['control [\"7\", \"generate\"]', ['7', 'generate'], 0], ['control [\"73\", \"validate\"]', ['73', 'validate'], False]], [['regression [\"600\", \"generate\"]', ['600', 'generate'], 8], ['regression [\"31723\", \"generate\"]', ['31723', 'generate'], 6], ['partial-repair [\"142857\", \"generate\"]', ['142857', 'generate'], 0], ['partial-repair [\"1428570\", \"validate\"]', ['1428570', 'validate'], True], ['control [\"6001\", \"validate\"]', ['6001', 'validate'], False], ['control [\"317230\", \"validate\"]', ['317230', 'validate'], False], ['control [\"2864257569\", \"validate\"]', ['2864257569', 'validate'], False], ['control [\"426688793324\", \"validate\"]', ['426688793324', 'validate'], False]]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-check_digit_algorithms-verhoeff-operand-order","generated_at":"2026-09-29T14:48:38.187010+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"National identity and ticketing numbers use Verhoeff to catch all single-digit and adjacent transposition errors.","repair":"Multiply the running state on the left: c = D[c][P[pos][digit]].","root_cause":"The step computes D[P(...)][c] instead of D[c][P(...)]; the dihedral group is not commutative.","sha256":"b62df265c76b27aebc536cfde6df5c8033398ea7a41a7b3bd4aefce29418ce1f","title":"Verhoeff composes the dihedral product in the wrong order · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.139,"exit_code":1,"observations":[{"actual":4,"check":"regression [\"12\", \"generate\"]","expected":1,"passed":false},{"actual":4,"check":"regression [\"600\", \"generate\"]","expected":8,"passed":false},{"actual":0,"check":"control [\"7\", \"generate\"]","expected":0,"passed":true},{"actual":false,"check":"control [\"73\", \"validate\"]","expected":false,"passed":true},{"actual":false,"check":"control [\"123\", \"validate\"]","expected":false,"passed":true},{"actual":false,"check":"control [\"6001\", \"validate\"]","expected":false,"passed":true},{"actual":false,"check":"control [\"317230\", \"validate\"]","expected":false,"passed":true},{"actual":false,"check":"control [\"2864257569\", \"validate\"]","expected":false,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"12\\\", \\\"generate\\\"]\", \"actual\": 4, \"expected\": 1, \"passed\": false}, {\"check\": \"regression [\\\"600\\\", \\\"generate\\\"]\", \"actual\": 4, \"expected\": 8, \"passed\": false}, {\"check\": \"control [\\\"7\\\", \\\"generate\\\"]\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"control [\\\"73\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"123\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"6001\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"317230\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"2864257569\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.499,"exit_code":1,"observations":[{"actual":4,"check":"regression [\"12\", \"generate\"]","expected":1,"passed":false},{"actual":7,"check":"regression [\"600\", \"generate\"]","expected":8,"passed":false},{"actual":0,"check":"control [\"7\", \"generate\"]","expected":0,"passed":true},{"actual":false,"check":"control [\"73\", \"validate\"]","expected":false,"passed":true},{"actual":false,"check":"control [\"123\", \"validate\"]","expected":false,"passed":true},{"actual":false,"check":"control [\"6001\", \"validate\"]","expected":false,"passed":true},{"actual":false,"check":"control [\"317230\", \"validate\"]","expected":false,"passed":true},{"actual":false,"check":"control [\"2864257569\", \"validate\"]","expected":false,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"12\\\", \\\"generate\\\"]\", \"actual\": 4, \"expected\": 1, \"passed\": false}, {\"check\": \"regression [\\\"600\\\", \\\"generate\\\"]\", \"actual\": 7, \"expected\": 8, \"passed\": false}, {\"check\": \"control [\\\"7\\\", \\\"generate\\\"]\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"control [\\\"73\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"123\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"6001\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"317230\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"2864257569\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.584,"exit_code":0,"observations":[{"actual":1,"check":"regression [\"12\", \"generate\"]","expected":1,"passed":true},{"actual":8,"check":"regression [\"600\", \"generate\"]","expected":8,"passed":true},{"actual":0,"check":"control [\"7\", \"generate\"]","expected":0,"passed":true},{"actual":false,"check":"control [\"73\", \"validate\"]","expected":false,"passed":true},{"actual":false,"check":"control [\"123\", \"validate\"]","expected":false,"passed":true},{"actual":false,"check":"control [\"6001\", \"validate\"]","expected":false,"passed":true},{"actual":false,"check":"control [\"317230\", \"validate\"]","expected":false,"passed":true},{"actual":false,"check":"control [\"2864257569\", \"validate\"]","expected":false,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"12\\\", \\\"generate\\\"]\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"regression [\\\"600\\\", \\\"generate\\\"]\", \"actual\": 8, \"expected\": 8, \"passed\": true}, {\"check\": \"control [\\\"7\\\", \\\"generate\\\"]\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"control [\\\"73\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"123\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"6001\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"317230\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"control [\\\"2864257569\\\", \\\"validate\\\"]\", \"actual\": false, \"expected\": false, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}