{"abstract":"Scanners reject every symbol because the centre guard pattern is inverted.","category":"Barcode symbology encoding","checks":8,"contract":"Encode a 13-character string of ASCII digits (the check digit is taken as given, not verified) as the 95-module EAN-13 pattern: start guard 101, six left digits in L or G sets chosen by the parity row of the leading digit, centre guard 01010, six right digits in the R set, end guard 101. R is the bitwise complement of L and G is R reversed. Anything else returns None.","evaluation_group":"w2-barcode-symbology-encoding-ean13-modules","failed_approach":"A four-module guard shifts the right half by one module.","family":"w2-barcode-symbology-encoding-ean13-modules-centre-guard","id":"FA-79356","implementations":{"attempt":{"sha256":"ba35246a46d297a8de4c1bed9ef8d33d3f4ee49d1a0c0871e7449c68d946f090","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(code):\n    if len(code) != 13 or not all(ch in '0123456789' for ch in code):\n        return None\n    L = ['0001101', '0011001', '0010011', '0111101', '0100011', '0110001', '0101111', '0111011', '0110111', '0001011']\n    R = [''.join('1' if b == '0' else '0' for b in p) for p in L]\n    G = [p[::-1] for p in R]\n    parity = ['LLLLLL', 'LLGLGG', 'LLGGLG', 'LLGGGL', 'LGLLGG', 'LGGLLG', 'LGGGLL', 'LGLGLG', 'LGLGGL', 'LGGLGL']\n    pat = parity[int(code[0])]\n    left = ''.join((L if pat[i] == 'L' else G)[int(code[1 + i])] for i in range(6))\n    right = ''.join(R[int(ch)] for ch in code[7:])\n    return '101' + left + '0101' + right + '101'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['5569719879594', '10101100010000101001011101110110011001001011101010100100010001001110100100111011101001011100101'], ['3339552094472', '10101111010111101001011101110010111001001001101010111001011101001011100101110010001001101100101'], ['400638133393１', None], ['12345678901٣2', None], ['123456789012', None], ['12345678901234', None], ['', None], ['5564657964331', '10101100010000101001110101011110110001001000101010111010010100001011100100001010000101100110101']], [['0777861705172', '10101110110111011011101101101110101111001100101010100010011100101001110110011010001001101100101'], ['4641860725337', '10101011110011101001100101101110000101010011101010100010011011001001110100001010000101000100101'], ['12345678901٣2', None], ['123456789012', None], ['12345678901234', None], ['', None], ['400638133393１', None], ['6141838617595', '10100110010011101011001100010010111101011011101010101000011001101000100100111011101001001110101']], [['3716511088176', '10101110110011001000010101110010110011001100101010111001010010001001000110011010001001010000101'], ['7062168881750', '10100011010000101001001101100110101111000100101010100100010010001100110100010010011101110010101'], ['123456789012', None], ['12345678901234', None], ['', None], ['400638133393１', None], ['12345678901٣2', None], ['6191360813603', '10100110010010111011001101000010101111000110101010100100011001101000010101000011100101000010101']], [['1986892142891', '10100010110110111000010101101110010111001101101010110011010111001101100100100011101001100110101'], ['6274612745694', '10100100110010001001110100001010011001001001101010100010010111001001110101000011101001011100101'], ['12345678901234', None], ['', None], ['400638133393１', None], ['12345678901٣2', None], ['123456789012', None], ['6346382380419', '10101111010011101000010101000010110111001001101010100001010010001110010101110011001101110100101']], [['8746102916553', '10101110110011101010111101100110100111001001101010111010011001101010000100111010011101000010101'], ['4502760148617', '10101100010100111001001101110110000101010011101010110011010111001001000101000011001101000100101'], ['', None], ['400638133393１', None], ['12345678901٣2', None], ['123456789012', None], ['12345678901234', None], ['3842111701831', '10101101110100011001101101100110110011001100101010100010011100101100110100100010000101100110101']]]\nlabels = [\"regression: centre guard pattern\", \"repair trap\", \"combined fault\", \"control\", \"control\", \"boundary\", \"boundary\", \"control\"]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"%s %d\" % (labels[i % len(labels)], i), 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":"faea22c0c2b8f9046285e6cd7eb53003fcfbc84b41c41f1a64dd1c22cb7d58dc","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(code):\n    if len(code) != 13 or not all(ch in '0123456789' for ch in code):\n        return None\n    L = ['0001101', '0011001', '0010011', '0111101', '0100011', '0110001', '0101111', '0111011', '0110111', '0001011']\n    R = [''.join('1' if b == '0' else '0' for b in p) for p in L]\n    G = [p[::-1] for p in R]\n    parity = ['LLLLLL', 'LLGLGG', 'LLGGLG', 'LLGGGL', 'LGLLGG', 'LGGLLG', 'LGGGLL', 'LGLGLG', 'LGLGGL', 'LGGLGL']\n    pat = parity[int(code[0])]\n    left = ''.join((L if pat[i] == 'L' else G)[int(code[1 + i])] for i in range(6))\n    right = ''.join(R[int(ch)] for ch in code[7:])\n    return '101' + left + '10101' + right + '101'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['5569719879594', '10101100010000101001011101110110011001001011101010100100010001001110100100111011101001011100101'], ['3339552094472', '10101111010111101001011101110010111001001001101010111001011101001011100101110010001001101100101'], ['400638133393１', None], ['12345678901٣2', None], ['123456789012', None], ['12345678901234', None], ['', None], ['5564657964331', '10101100010000101001110101011110110001001000101010111010010100001011100100001010000101100110101']], [['0777861705172', '10101110110111011011101101101110101111001100101010100010011100101001110110011010001001101100101'], ['4641860725337', '10101011110011101001100101101110000101010011101010100010011011001001110100001010000101000100101'], ['12345678901٣2', None], ['123456789012', None], ['12345678901234', None], ['', None], ['400638133393１', None], ['6141838617595', '10100110010011101011001100010010111101011011101010101000011001101000100100111011101001001110101']], [['3716511088176', '10101110110011001000010101110010110011001100101010111001010010001001000110011010001001010000101'], ['7062168881750', '10100011010000101001001101100110101111000100101010100100010010001100110100010010011101110010101'], ['123456789012', None], ['12345678901234', None], ['', None], ['400638133393１', None], ['12345678901٣2', None], ['6191360813603', '10100110010010111011001101000010101111000110101010100100011001101000010101000011100101000010101']], [['1986892142891', '10100010110110111000010101101110010111001101101010110011010111001101100100100011101001100110101'], ['6274612745694', '10100100110010001001110100001010011001001001101010100010010111001001110101000011101001011100101'], ['12345678901234', None], ['', None], ['400638133393１', None], ['12345678901٣2', None], ['123456789012', None], ['6346382380419', '10101111010011101000010101000010110111001001101010100001010010001110010101110011001101110100101']], [['8746102916553', '10101110110011101010111101100110100111001001101010111010011001101010000100111010011101000010101'], ['4502760148617', '10101100010100111001001101110110000101010011101010110011010111001001000101000011001101000100101'], ['', None], ['400638133393１', None], ['12345678901٣2', None], ['123456789012', None], ['12345678901234', None], ['3842111701831', '10101101110100011001101101100110110011001100101010100010011100101100110100100010000101100110101']]]\nlabels = [\"regression: centre guard pattern\", \"repair trap\", \"combined fault\", \"control\", \"control\", \"boundary\", \"boundary\", \"control\"]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"%s %d\" % (labels[i % len(labels)], i), 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":"dc93b3cc112392e239637ab260971871f8f3bd7bbadf39a9b3353a54f996cefa","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(code):\n    if len(code) != 13 or not all(ch in '0123456789' for ch in code):\n        return None\n    L = ['0001101', '0011001', '0010011', '0111101', '0100011', '0110001', '0101111', '0111011', '0110111', '0001011']\n    R = [''.join('1' if b == '0' else '0' for b in p) for p in L]\n    G = [p[::-1] for p in R]\n    parity = ['LLLLLL', 'LLGLGG', 'LLGGLG', 'LLGGGL', 'LGLLGG', 'LGGLLG', 'LGGGLL', 'LGLGLG', 'LGLGGL', 'LGGLGL']\n    pat = parity[int(code[0])]\n    left = ''.join((L if pat[i] == 'L' else G)[int(code[1 + i])] for i in range(6))\n    right = ''.join(R[int(ch)] for ch in code[7:])\n    return '101' + left + '01010' + right + '101'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['5569719879594', '10101100010000101001011101110110011001001011101010100100010001001110100100111011101001011100101'], ['3339552094472', '10101111010111101001011101110010111001001001101010111001011101001011100101110010001001101100101'], ['400638133393１', None], ['12345678901٣2', None], ['123456789012', None], ['12345678901234', None], ['', None], ['5564657964331', '10101100010000101001110101011110110001001000101010111010010100001011100100001010000101100110101']], [['0777861705172', '10101110110111011011101101101110101111001100101010100010011100101001110110011010001001101100101'], ['4641860725337', '10101011110011101001100101101110000101010011101010100010011011001001110100001010000101000100101'], ['12345678901٣2', None], ['123456789012', None], ['12345678901234', None], ['', None], ['400638133393１', None], ['6141838617595', '10100110010011101011001100010010111101011011101010101000011001101000100100111011101001001110101']], [['3716511088176', '10101110110011001000010101110010110011001100101010111001010010001001000110011010001001010000101'], ['7062168881750', '10100011010000101001001101100110101111000100101010100100010010001100110100010010011101110010101'], ['123456789012', None], ['12345678901234', None], ['', None], ['400638133393１', None], ['12345678901٣2', None], ['6191360813603', '10100110010010111011001101000010101111000110101010100100011001101000010101000011100101000010101']], [['1986892142891', '10100010110110111000010101101110010111001101101010110011010111001101100100100011101001100110101'], ['6274612745694', '10100100110010001001110100001010011001001001101010100010010111001001110101000011101001011100101'], ['12345678901234', None], ['', None], ['400638133393１', None], ['12345678901٣2', None], ['123456789012', None], ['6346382380419', '10101111010011101000010101000010110111001001101010100001010010001110010101110011001101110100101']], [['8746102916553', '10101110110011101010111101100110100111001001101010111010011001101010000100111010011101000010101'], ['4502760148617', '10101100010100111001001101110110000101010011101010110011010111001001000101000011001101000100101'], ['', None], ['400638133393１', None], ['12345678901٣2', None], ['123456789012', None], ['12345678901234', None], ['3842111701831', '10101101110100011001101101100110110011001100101010100010011100101100110100100010000101100110101']]]\nlabels = [\"regression: centre guard pattern\", \"repair trap\", \"combined fault\", \"control\", \"control\", \"boundary\", \"boundary\", \"control\"]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"%s %d\" % (labels[i % len(labels)], i), 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 with a stipulated contract; it makes no claim of conformance to any published specification. 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-barcode-symbology-encoding-ean13-modules-centre-guard","generated_at":"2026-09-29T14:49:43.801711+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Retail, logistics, pharmacy and document workflows depend on encoders that produce exactly the module pattern, code-set switches, separators and quiet zones scanners expect; one misplaced module or separator makes a label unreadable or, worse, scan as different data.","repair":"The centre guard is space-bar-space-bar-space: 01010.","root_cause":"The centre guard is written as 10101 instead of 01010.","sha256":"193228eee656c9b0633a1133457c727aab79db0b7b1dbf0dafd49c34e2ab8b1a","title":"EAN-13 centre guard starts with a bar · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.709,"exit_code":1,"observations":[{"actual":"1010110001000010100101110111011001100100101110101100100010001001110100100111011101001011100101","check":"regression: centre guard pattern 0","expected":"10101100010000101001011101110110011001001011101010100100010001001110100100111011101001011100101","passed":false},{"actual":"1010111101011110100101110111001011100100100110101111001011101001011100101110010001001101100101","check":"repair trap 1","expected":"10101111010111101001011101110010111001001001101010111001011101001011100101110010001001101100101","passed":false},{"actual":null,"check":"combined fault 2","expected":null,"passed":true},{"actual":null,"check":"control 3","expected":null,"passed":true},{"actual":null,"check":"control 4","expected":null,"passed":true},{"actual":null,"check":"boundary 5","expected":null,"passed":true},{"actual":null,"check":"boundary 6","expected":null,"passed":true},{"actual":"1010110001000010100111010101111011000100100010101111010010100001011100100001010000101100110101","check":"control 7","expected":"10101100010000101001110101011110110001001000101010111010010100001011100100001010000101100110101","passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: centre guard pattern 0\", \"actual\": \"1010110001000010100101110111011001100100101110101100100010001001110100100111011101001011100101\", \"expected\": \"10101100010000101001011101110110011001001011101010100100010001001110100100111011101001011100101\", \"passed\": false}, {\"check\": \"repair trap 1\", \"actual\": \"1010111101011110100101110111001011100100100110101111001011101001011100101110010001001101100101\", \"expected\": \"10101111010111101001011101110010111001001001101010111001011101001011100101110010001001101100101\", \"passed\": false}, {\"check\": \"combined fault 2\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control 3\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control 4\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"boundary 5\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"boundary 6\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control 7\", \"actual\": \"1010110001000010100111010101111011000100100010101111010010100001011100100001010000101100110101\", \"expected\": \"10101100010000101001110101011110110001001000101010111010010100001011100100001010000101100110101\", \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.354,"exit_code":1,"observations":[{"actual":"10101100010000101001011101110110011001001011110101100100010001001110100100111011101001011100101","check":"regression: centre guard pattern 0","expected":"10101100010000101001011101110110011001001011101010100100010001001110100100111011101001011100101","passed":false},{"actual":"10101111010111101001011101110010111001001001110101111001011101001011100101110010001001101100101","check":"repair trap 1","expected":"10101111010111101001011101110010111001001001101010111001011101001011100101110010001001101100101","passed":false},{"actual":null,"check":"combined fault 2","expected":null,"passed":true},{"actual":null,"check":"control 3","expected":null,"passed":true},{"actual":null,"check":"control 4","expected":null,"passed":true},{"actual":null,"check":"boundary 5","expected":null,"passed":true},{"actual":null,"check":"boundary 6","expected":null,"passed":true},{"actual":"10101100010000101001110101011110110001001000110101111010010100001011100100001010000101100110101","check":"control 7","expected":"10101100010000101001110101011110110001001000101010111010010100001011100100001010000101100110101","passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: centre guard pattern 0\", \"actual\": \"10101100010000101001011101110110011001001011110101100100010001001110100100111011101001011100101\", \"expected\": \"10101100010000101001011101110110011001001011101010100100010001001110100100111011101001011100101\", \"passed\": false}, {\"check\": \"repair trap 1\", \"actual\": \"10101111010111101001011101110010111001001001110101111001011101001011100101110010001001101100101\", \"expected\": \"10101111010111101001011101110010111001001001101010111001011101001011100101110010001001101100101\", \"passed\": false}, {\"check\": \"combined fault 2\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control 3\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control 4\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"boundary 5\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"boundary 6\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control 7\", \"actual\": \"10101100010000101001110101011110110001001000110101111010010100001011100100001010000101100110101\", \"expected\": \"10101100010000101001110101011110110001001000101010111010010100001011100100001010000101100110101\", \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.985,"exit_code":0,"observations":[{"actual":"10101100010000101001011101110110011001001011101010100100010001001110100100111011101001011100101","check":"regression: centre guard pattern 0","expected":"10101100010000101001011101110110011001001011101010100100010001001110100100111011101001011100101","passed":true},{"actual":"10101111010111101001011101110010111001001001101010111001011101001011100101110010001001101100101","check":"repair trap 1","expected":"10101111010111101001011101110010111001001001101010111001011101001011100101110010001001101100101","passed":true},{"actual":null,"check":"combined fault 2","expected":null,"passed":true},{"actual":null,"check":"control 3","expected":null,"passed":true},{"actual":null,"check":"control 4","expected":null,"passed":true},{"actual":null,"check":"boundary 5","expected":null,"passed":true},{"actual":null,"check":"boundary 6","expected":null,"passed":true},{"actual":"10101100010000101001110101011110110001001000101010111010010100001011100100001010000101100110101","check":"control 7","expected":"10101100010000101001110101011110110001001000101010111010010100001011100100001010000101100110101","passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: centre guard pattern 0\", \"actual\": \"10101100010000101001011101110110011001001011101010100100010001001110100100111011101001011100101\", \"expected\": \"10101100010000101001011101110110011001001011101010100100010001001110100100111011101001011100101\", \"passed\": true}, {\"check\": \"repair trap 1\", \"actual\": \"10101111010111101001011101110010111001001001101010111001011101001011100101110010001001101100101\", \"expected\": \"10101111010111101001011101110010111001001001101010111001011101001011100101110010001001101100101\", \"passed\": true}, {\"check\": \"combined fault 2\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control 3\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control 4\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"boundary 5\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"boundary 6\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control 7\", \"actual\": \"10101100010000101001110101011110110001001000101010111010010100001011100100001010000101100110101\", \"expected\": \"10101100010000101001110101011110110001001000101010111010010100001011100100001010000101100110101\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}