어느 자리가 쓰이는가, 40비트 산포, 그리고 EAN-8
참고: 이 페이지는 시판 JAN/EAN에 관한 내용이다. 데이터크는 전혀 다른 규칙으로 움직이는 반다이 전용 카드 규격도 읽는다 — 4. 반다이 전용 바코드 참조.
日本語 | English | Français | Español | Italiano | 한국어
EAN-13의 13자리는 왼쪽부터 d1~d13으로 센다. 4902773230126이라면 d1=4, d2=9, … d13=6이다. 각 자리는 0~9의 값이고, 그 비트를 b0(최하위)부터 b3으로 적는다. 따라서 d6=7이면 b0=1, b1=1, b2=1, b3=0이 된다.
첫 번째 중요한 사실. 캐릭터와 능력치 계산에 쓰이는 것은 d3~d12뿐이다. 앞의 두 자리(국가 코드)와 맨 끝의 체크 디지트는 결과에 영향을 주지 않는다. 그래서 4902773230126과 4502773230128(앞자리를 45로 바꾸고 체크 디지트를 다시 계산한 것)은 완전히 같은 결과를 낸다. 플레이어들은 경험적으로 국가 코드가 「아무 일도 하지 않는다」는 것을 알아냈는데, 프로그램을 읽어보니 실제로 그렇게 구현되어 있었다.
체크 디지트가 계산에 쓰이지 않는다고 해서 아무 숫자나 넣어도 된다는 뜻은 아니다. 계산 앞단의 리더가 이를 검사하며, 검사를 통과하지 못한 코드는 거기서 오류가 난다. 위 예시가 앞자리를 바꾼 뒤 체크 디지트를 다시 계산한 것도 그 때문이다. 체크 디지트만 바꾼 코드는 애초에 읽히지 않는다. 정확히 말하면 체크 디지트는 결과 계산에는 관여하지 않지만 판독의 유효성 검사에는 쓰인다. 이 사실은 실측 기록의 불일치를 추적하다 드러났고, 그 경위는 곁다리 이야기에 있다.
d3–d12 열 자리는 각각 네 비트(b0–b3)로 쪼개진다. 그렇게 만들어진 40비트가 고정된 표에 따라 한 비트씩 다섯 개의 내부 레지스터 R0–R4로 흩뿌려진다.
바깥에서 이 구조를 알아내기 어려웠던 이유가 여기에 있다. 인접한 자릿수의 정보가 멀리 떨어진 비트 위치로 날아가기 때문에, 한 자리씩 바꿔가며 실험해도 규칙이 고르게 드러나지 않는다.
전체 표. 열은 출발 비트이고, 각 칸은 도착하는 레지스터와 비트 위치다.
| 자리 | b0 → | b1 → | b2 → | b3 → |
|---|---|---|---|---|
| d3 | R3 bit7 | R2 bit4 | R4 bit4 | R3 bit4 |
| d4 | R0 bit5 | R2 bit0 | R3 bit6 | R3 bit3 |
| d5 | R1 bit1 | R3 bit0 | R0 bit3 | R4 bit0 |
| d6 | R1 bit3 | R1 bit5 | R0 bit0 | R4 bit3 |
| d7 | R0 bit7 | R0 bit1 | R1 bit7 | R3 bit2 |
| d8 | R1 bit4 | R2 bit3 | R4 bit5 | R2 bit2 |
| d9 | R2 bit7 | R1 bit0 | R2 bit6 | R4 bit6 |
| d10 | R0 bit2 | R4 bit1 | R3 bit1 | R3 bit5 |
| d11 | R1 bit2 | R2 bit1 | R0 bit4 | R4 bit2 |
| d12 | R0 bit6 | R4 bit7 | R1 bit6 | R2 bit5 |
40비트가 남김없이 40비트에 대응한다. 즉 이 사상은 전단사다. 정보는 버려지지 않고 자리만 바뀐다.
이후 R0–R4는 하나의 40비트 스트림으로 취급되어 앞쪽(R0의 최상위 비트)부터 소비된다. 그 소비량은 정확히 40비트로 딱 나뉜다.
| 읽는 비트 수 | 용도 | 상세 |
|---|---|---|
| 2 | 아이템 칸인가 캐릭터 칸인가 | 2번 해석 |
| 8 | 캐릭터 가중 추첨 | |
| 3 | 필살기 레벨 | 3번 해석 |
| 9 × 3 | HP·BP·DP(각 9비트) |
담배나 소형 상품에 붙은 8자리 코드도 읽을 수 있다. 게임은 여덟 자리 o1–o8을 접어서 되풀이해 유효한 열 자리를 만든 뒤, EAN-13과 완전히 같은 처리를 돌린다. 그 열 자리는 다음과 같다.
[o3, o4, o5, o6, o7, o8, o7, o6, o5, o4]
따라서 EAN-8이 담는 정보는 여섯 자리(o3–o8)뿐이고, o4–o7은 각각 두 번씩 쓰인다. 흥미로운 결과로, EAN-13과 달리 EAN-8에서는 체크 디지트(o8)가 계산에 참여한다. 그래서 8자리 코드에서 o8 하나만 잘못 적어도 능력치가 어긋나는 형태로 드러난다. 어긋난 기록들을 풀어낸 열쇠가 바로 이 성질이었다.