이슈 세로 바코드를 가린 싸이버거 코드 복원하는 원리
금지 규정 | 네 정치&시사 글이 아닙니다 |
---|
싸이버거 바코드
중간에 세로로 한줄이 지워져 있다.
바코드를 복원해보자.
1. 우선 바코드로 쓰인 CODE128은 여러곳에서 매우 자주 쓰이며, BSBSBS 코드를 가지고 있다.
무슨 의미냐면
코드 조각이 바(B) 하나, 공간(S) 하나 X3의 구성으로 되어 있다는 의미다.
사이즈와 공간이 핵심이므로
우선 바코드 전체에 1와 0으로 갯수를 적어놓도록 한다.
먼저 시작부분.
11010010000 = 211214 = 시작 코드 B 임을 알 수 있다.
그러나 곧바로 바코드 형식을 코드 C로 바꾸는 코드가 나옴. (10111011110)
이어서 94 (10001011110) 가 나오고
이걸 반복해주면 됨.
문제의 부분이 발견되었음.
0이 6개나 되는 경우는 없기 때문임.
그럼 반대서부터 계산해 오도록 하자.
한자리가 비어 있음을 알 수 있다.
? 에 들어가는 바코드는, 110으로 시작해서 0100으로 끝난다.
110 으로 시작하는 값은 29개
동시에 0100으로 끝나면서 숫자 값을 가지는건 4개 뿐이다.
그럼 4개중에 뭐가 정답일까?
바코드의 검증을 위해 체크섬 계산을 해야한다.
바코드 맨 뒤에 붙은 FNC1 (기능1) 이라는 코드는 무슨 의미일까?
보통은 뒤에 붙는 일이 없다.
그러므로 이는 바코드 앞 내용의 검증을 위한 검증값(체크섬) 이다.
CODE128의 검증값 계산은 다음과 같다.
(시작 코드 값 + (자리별 코드 * 위치값)) / 103 의 나머지 값이 검증값이다.
즉, 검증값 계산을 끝낸 바코드의 값이 FNC1의 값인 102가 나온다면 올바른 바코드라는 의미다.
먼저 각 코드별 값을 기재한다.
각각 104, 99, 94, 63, 0, ?, 92, 51, 102 다.
코드 C는 숫자표시용 코드인데, 공백은 0을 의미하기 때문임.
여기서 ? 에 들어갈 수 있는 값은 10, 11, 21, 22 4가지 경우이므로
우선 10 부터 테스트한다.
나온 값이 92니까 저 자리에 바코드 10이 들어가는건 아니다 라는걸 알 수 있다.
11을 넣었을 경우 102가 나오므로 11이 들어가는게 맞다는걸 알 수 있다.
혹시 모르니 나머지 두개도 더 계산함.
21의 경우도 아님.
물론 22도 아님.
즉, 바코드 한줄이 아닌 아예 세 줄이 비어 있더라도
검증값(체크섬) 검사에 의해 어떤 코드가 들어가는지 알아낼 수 있는데
위의 싸이버거 바코드의 경우 빈 자리에 11이 들어가므로
이런식으로 처음의 바코드를 온전하게 복원 해 낼 수 있으며
휴대폰으로 인식시켰을 때 제대로 인식하므로
싸이버거 코드는 9463 0011 9251 이라는 결론이 나오게 된다.
그리고 이 작업을
1분 내로 할 줄 알아야 싸이버거를 먼저 먹을 수 있다.
무슨말인지 이해했어 !!