메뉴 건너뛰기

app

[바코드] 모든 바코드는 패리티를 갖는다.

박영식2007.01.22 20:29조회 수 3327댓글 0

  • 1
    • 글자 크기
이것은 나에겐 큰 사건일 수 있다. 바코드의 비밀.. 어떤 연속되는 10자리 이상의 숫자. 그리고 이것이 컴퓨터와 관련되어 사용된다면 분명히 검사코드는 존재한다. 주민등록번호, ISBN, 일반 제품 바코드.

PC방에서는 매장카드가 있다. 이것도 바코드가 사용된다. 그런데 누구의 소행인지는 몰라도 카드가 계속 분시되어 사용할 카드가 모잘라 진다. 이것은 카드의 유통량이 많은 내 근무시간에 아주 치명적이다. 그런데 어느날 예전 프로그램에 쓰던 바코드가 인쇄된 종이를 발견하였다. 그것을 본 순간 바코드를 만들어야겠다는 생각이 떠올랐다.



바코드를 만드는 것은 '애니프로라벨'이란 프로그램으로 가능하다는 것을 검색을 통해 알게되었다. 문제는 숫자. 그 카드 번호의 숫자가 어떻게 되는 것인가다. 14자리인데 뒤에서 6번째부터 3번째까지가 그 카드의 번호가 된다. 이것까지는 문제도 아니다. 그런데 나머지 세자리. 전혀 규칙성이 없다. 사칙연산으로 풀리지 않았다. 그래서 ISBN과 ISSN의 규칙을 읽고, 부정방정식을 세웠다. 그결과 직관으로(찍어서) 홀수번째 자리에 3을 곱하고 짝수번째 자리에 1을 곱해서 더한 합이 10의 배수가 나오는 것을 알아냈다.(푸핫핫)



어떤 카드(94번)는 5의 배수였다. 이것만이 예외인지는 알 수 없어서 엄청 힘들었다. 앞의 번호는 60104100 으로 동일하다. 카드번호 세자리와 검사코드 세자리만 조합하면 되었다. 그러나 앞서 언급했다시피 방정식을 세워서 10의 배수를 만든다 해도 그 조합이 10의 자승이 나왔다. 그래서 2초만 걸린다고 해도 200초 즉, 3분 20초의 시간이 소요되는 셈이다. 엄청난 손놀림으로 트리플 넘버(111, 222, 333, ....)을 찾아냈다. 물론 일전에는 없어진 숫자들(88과 86사이의 87등과 같이)을 찾느라고 10의 3제곱에 해당하는 숫자들을 입력하기도 했다.(이 때는 어떤 법칙을 몰라서 무식한 방법을 썼다.) 지금은 20초만에 찾아내기도 한다.(그래서 시시하다고 까지 외쳤다.) 100번대(200, 300, 400,...)는 마지막 숫자가 0이나 5가 나오는 규칙도 발견해 900은 아주 쉽게 찾아냈다.(조합이 20개밖에 없다.)



아무튼 수학적 직관과 인내로 카드를 만들어낸 것이 정말 흥미로운 일이었다. 다만 아쉬운 것이 있다면, 전체적인 절대 규칙을 찾지 못했다는 것이다. 그래서 숫자를 찾는다면 최소한 3분 20여초의 시간은 걸린다는 것에 한계를 갖고 있다.

박영식 (비회원)
  • 1
    • 글자 크기
[flash] 재귀적 패턴 (by 박영식) [fortify] C/C++ 진단하기 (by suritam9)

댓글 달기

이전 1 ... 3 4 5 6 7 8 9 10 11 12... 14다음
첨부 (1)
check.hwp
98.0KB / Download 70
위로