기출노트 로고기출노트
시작하기
컴퓨터 기초

바코드 끝자리의 계산법

123456789012□

빈칸에 들어갈 숫자를 구해볼까요? 이 연습을 위해 만든 학습용 숫자열입니다. 앞 숫자들이 주어지면 끝의 검증번호를 계산하는 GTIN-13 방식으로 채워보겠습니다.

GTIN-13은 소매 상품을 식별하는 13자리 숫자 코드이며 EAN-13 바코드에 담습니다. 맨 마지막 숫자가 정해진 수식으로 계산하는 체크디지트, 곧 검증번호예요.1 바코드 종류마다 자릿수와 규칙이 같다는 뜻은 아닙니다. 여기서는 위의 앞 12자리에 붙일 한 자리만 구합니다.

8이 들어가는 자리

GTIN-13의 앞 12자리에는 왼쪽부터 번갈아 1과 3을 곱하고, 그 결과를 모두 더합니다. GS1 공식 계산 안내도 이 순서를 사용합니다.2 맨 왼쪽 1에는 1, 그다음 2에는 3을 곱합니다. 여섯 자리를 지나 다음 줄로 내려가도 위치 순서는 이어집니다.

앞 12자리 123456789012에 왼쪽부터 1과 3을 번갈아 곱하는 그림. 홀수 위치의 합 26, 짝수 위치의 합 22.

하나씩 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

  1. GS1 Korea, GTIN 유형 및 구조. GTIN-13 절에서 13자리 소매 상품 식별코드가 EAN-13에 입력된다고 설명하고, 체크디지트 절에서 맨 마지막에 정해진 수식의 결과값을 사용한다고 안내합니다. 본문 학습용 수열을 실제 배정 상품번호라고 제시한 것은 아닙니다. ↩

  2. GS1, How to calculate a check digit manually. GTIN-13 예제 표의 앞 12자리 가중치 1·3교대와 Step3의 ‘합계와 같거나 더 큰 가장 가까운 10의 배수에서 빼기’ 규칙을 확인했습니다. 본문의 92·95·10·19·9는 공식 예제를 옮긴 값이 아니라 자체 입력에 이 규칙을 적용한 계산입니다. ↩ ↩2 ↩3

  3. GS1 Korea, Verified by GS1. 활용 항목에서 사용 권한 사업자, 정식 등록GTIN, 해당 상품의 기본 정보를 확인한다고 설명합니다. 단순 체크디지트 계산으로 이 조회 결과까지 얻는다고 쓰지 않았습니다. ↩