123456789012□
빈칸에 들어갈 숫자를 구해볼까요? 이 연습을 위해 만든 학습용 숫자열입니다. 앞 숫자들이 주어지면 끝의 검증번호를 계산하는 GTIN-13 방식으로 채워보겠습니다.
GTIN-13은 소매 상품을 식별하는 13자리 숫자 코드이며 EAN-13 바코드에 담습니다. 맨 마지막 숫자가 정해진 수식으로 계산하는 체크디지트, 곧 검증번호예요.1 바코드 종류마다 자릿수와 규칙이 같다는 뜻은 아닙니다. 여기서는 위의 앞 12자리에 붙일 한 자리만 구합니다.
8이 들어가는 자리
GTIN-13의 앞 12자리에는 왼쪽부터 번갈아 1과 3을 곱하고, 그 결과를 모두 더합니다. GS1 공식 계산 안내도 이 순서를 사용합니다.2 맨 왼쪽 1에는 1, 그다음 2에는 3을 곱합니다. 여섯 자리를 지나 다음 줄로 내려가도 위치 순서는 이어집니다.
하나씩 12번 계산하는 대신, 1을 곱하는 숫자와 3을 곱하는 숫자를 묶어도 같은 합이 나옵니다.
1을 곱하는 자리: 1+3+5+7+9+1 = 26
3을 곱하는 자리: 2+4+6+8+0+2 = 22
가중합: 26 + 3×22 = 92
여기서 92의 끝자리 2를 그대로 붙이는 것이 아닙니다. 가중합에 검증번호를 더했을 때 10의 배수가 되도록 남은 값을 채웁니다. GS1 안내는 합계와 같거나 더 큰 가장 가까운 10의 배수에서 합계를 빼라고 설명해요.2
92에 8을 더하면 100이 됩니다. 따라서 빈칸의 답은 8, 완성한 연습용 숫자열은1234567890128입니다. 마지막 검증번호에는 가중치 1이 적용된다고 생각하면, 전체 가중합이 100으로 닫히는 모습을 볼 수 있어요.
앞 12자리를 바꾸면 끝자리도 바뀔 수 있습니다. 같은 예제의 마지막 입력 2를 3으로 바꾸면 가중합은 95가 되고, 새 검증번호는 5입니다. 그런데 앞의 번호를 잘못 옮겨 적으면서 기존의 끝자리 8을 그대로 둔다면 95+8=103이 되어 10의 배수 조건을 통과하지 못해요. 끝자리 8은 그대로인데 앞에서 다시 구한 합과 맞지 않습니다. 검사하는 쪽은 이 불일치로 번호를 다시 읽거나 입력해야 할 상황을 알아차릴 수 있어요.
이미 합계가 10의 배수라면 어떻게 될까요? 별도의 학습용 입력 100000000003은 1+3×3=10입니다. 이때는 10에서 10을 빼므로 검증번호는 0이에요. ‘다음 10의 배수’라고만 외워 무조건 10을 더 가면 10이 나와 한 자리 검증번호가 될 수 없습니다. 공식 안내의 같거나 더 큰이라는 조건이 필요한 지점입니다.2
바뀌었는데도 검사에 걸리지 않는다면
검증번호가 맞으면 앞 숫자들이 전부 맞다고 믿어도 될까요? 이번에는 숫자 1과 6의 위치만 바꾼 두 학습용 입력을 계산해보세요. 나머지 자리는 모두 0으로 정했습니다.
160000000000 → 1 + 3×6 = 19 → 검증번호 1
610000000000 → 6 + 3×1 = 9 → 검증번호 1
첫 번호는 19+1=20, 둘째는 9+1=10입니다. 둘 다 10의 배수라 같은 끝자리 1로 조건을 통과합니다. 실제로 숫자 둘의 자리가 바뀌었는데도 검증번호는 달라지지 않았어요. 두 가중합의 차가 10이라서 끝자리 1을 더한 뒤에도 둘 다 10의 배수로 남습니다. 이 자체 반례는 검증번호가 일치해도 바뀐 번호일 수 있다는 한계를 보여줍니다.
검증번호를 계산한 것과 상품 정보를 조회한 것도 다른 일입니다. GS1 Korea는 정식 등록된 GTIN인지, 사용 권한을 가진 사업자가 누구인지, 기본 상품 정보가 무엇인지 확인하는 별도의 서비스를 안내합니다.3 이 글의 숫자열은 그 조회나 실제 번호 배정을 한 결과가 아닙니다.
가령 앞의 입력이 160000000000인 연습 번호를 읽으려는데 6100000000001이 입력됐다고 해볼게요. 두 숫자가 바뀌었어도 끝의 1은 계산과 맞습니다. 검증번호 검사는 이 두 줄을 구별해주지 못하므로, 일치했다는 결과만으로 원래 읽으려던 숫자열과 같다고 확인할 수는 없습니다.
Footnotes
-
GS1 Korea, GTIN 유형 및 구조. GTIN-13 절에서 13자리 소매 상품 식별코드가 EAN-13에 입력된다고 설명하고, 체크디지트 절에서 맨 마지막에 정해진 수식의 결과값을 사용한다고 안내합니다. 본문 학습용 수열을 실제 배정 상품번호라고 제시한 것은 아닙니다. ↩
-
GS1, How to calculate a check digit manually. GTIN-13 예제 표의 앞 12자리 가중치 1·3교대와 Step3의 ‘합계와 같거나 더 큰 가장 가까운 10의 배수에서 빼기’ 규칙을 확인했습니다. 본문의 92·95·10·19·9는 공식 예제를 옮긴 값이 아니라 자체 입력에 이 규칙을 적용한 계산입니다. ↩ ↩2 ↩3
-
GS1 Korea, Verified by GS1. 활용 항목에서 사용 권한 사업자, 정식 등록GTIN, 해당 상품의 기본 정보를 확인한다고 설명합니다. 단순 체크디지트 계산으로 이 조회 결과까지 얻는다고 쓰지 않았습니다. ↩