1. 바코드를 읽는 방식

어느 자리가 쓰이는가, 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뿐

첫 번째 중요한 사실. 캐릭터와 능력치 계산에 쓰이는 것은 d3~d12뿐이다. 앞의 두 자리(국가 코드)와 맨 끝의 체크 디지트는 결과에 영향을 주지 않는다. 그래서 4902773230126과 4502773230128(앞자리를 45로 바꾸고 체크 디지트를 다시 계산한 것)은 완전히 같은 결과를 낸다. 플레이어들은 경험적으로 국가 코드가 「아무 일도 하지 않는다」는 것을 알아냈는데, 프로그램을 읽어보니 실제로 그렇게 구현되어 있었다.

체크 디지트가 계산에 쓰이지 않는다고 해서 아무 숫자나 넣어도 된다는 뜻은 아니다. 계산 앞단의 리더가 이를 검사하며, 검사를 통과하지 못한 코드는 거기서 오류가 난다. 위 예시가 앞자리를 바꾼 뒤 체크 디지트를 다시 계산한 것도 그 때문이다. 체크 디지트만 바꾼 코드는 애초에 읽히지 않는다. 정확히 말하면 체크 디지트는 결과 계산에는 관여하지 않지만 판독의 유효성 검사에는 쓰인다. 이 사실은 실측 기록의 불일치를 추적하다 드러났고, 그 경위는 곁다리 이야기에 있다.

40비트 산포

d3–d12 열 자리는 각각 네 비트(b0–b3)로 쪼개진다. 그렇게 만들어진 40비트가 고정된 표에 따라 한 비트씩 다섯 개의 내부 레지스터 R0–R4로 흩뿌려진다.

바깥에서 이 구조를 알아내기 어려웠던 이유가 여기에 있다. 인접한 자릿수의 정보가 멀리 떨어진 비트 위치로 날아가기 때문에, 한 자리씩 바꿔가며 실험해도 규칙이 고르게 드러나지 않는다.

전체 표. 열은 출발 비트이고, 각 칸은 도착하는 레지스터와 비트 위치다.

자리b0 → b1 → b2 → b3 →
d3R3 bit7R2 bit4R4 bit4R3 bit4
d4R0 bit5R2 bit0R3 bit6R3 bit3
d5R1 bit1R3 bit0R0 bit3R4 bit0
d6R1 bit3R1 bit5R0 bit0R4 bit3
d7R0 bit7R0 bit1R1 bit7R3 bit2
d8R1 bit4R2 bit3R4 bit5R2 bit2
d9R2 bit7R1 bit0R2 bit6R4 bit6
d10R0 bit2R4 bit1R3 bit1R3 bit5
d11R1 bit2R2 bit1R0 bit4R4 bit2
d12R0 bit6R4 bit7R1 bit6R2 bit5

40비트가 남김없이 40비트에 대응한다. 즉 이 사상은 전단사다. 정보는 버려지지 않고 자리만 바뀐다.

산포 이후에는 읽는 순서가 전부를 결정한다

이후 R0–R4는 하나의 40비트 스트림으로 취급되어 앞쪽(R0의 최상위 비트)부터 소비된다. 그 소비량은 정확히 40비트로 딱 나뉜다.

읽는 비트 수용도상세
2아이템 칸인가 캐릭터 칸인가2번 해석
8캐릭터 가중 추첨
3필살기 레벨3번 해석
9 × 3HP·BP·DP(각 9비트)

EAN-8(짧은 8자리 바코드)

담배나 소형 상품에 붙은 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 하나만 잘못 적어도 능력치가 어긋나는 형태로 드러난다. 어긋난 기록들을 풀어낸 열쇠가 바로 이 성질이었다.

요약. 바코드는 난수의 씨앗이 아니다. 40비트가 정해진 자리로 흩뿌려진 뒤 정해진 순서로 다시 읽힐 뿐이다. 과정은 완전히 결정적이며, 같은 바코드는 언제나 같은 캐릭터를 낸다.

→ 2번 해석: 캐릭터 결정