차이점

이 페이지의 선택한 이전 버전과 현재 버전 사이의 차이점을 보여줍니다.

차이 보기로 연결

체크숫자 [2011-05-30 18:25] (현재)
줄 1: 줄 1:
 +====== 체크 숫자 ======
  
 +데이터 뒤에 붙어서 해당 데이터가 잘못 입력되거나 잘못 전송되거나 해서 생기는 오류를 잡아 내는 용도로 사용하는 숫자. 보통 체크 숫자라고 할 때는 대부분 [[식별자]]에 포함되는 간단한 한 두 자리 정도의 숫자를 나타내는 케이스가 흔하며, 좀 더 일반적인 케이스는 [[오류검출부호]]와 [[오류정정부호]]를 보라.
 +
 +===== 알고리즘 =====
 +
 +많은 수의 체크 숫자는 체크 숫자를 포함한 데이터의 각 자리에 고정된 가중치를 곱하여 모두 더한 뒤, 그 합이 특정한 나눔수(보통 10 또는 11)로 나눠서 떨어지도록 체크 숫자를 정하는 방법을 사용한다. (계산을 편리하게 하기 위해 체크 숫자에 대응되는 가중치는 1인 경우가 보통이다.) 이 방법은 두 종류의 흔한 오류를 보정하는 데 효험이 있는데:
 +
 +  - 데이터의 한 자리를 잘못 입력했을 경우
 +  - 데이터의 인접한 두 자리를 서로 바꿔 입력했을 경우
 +
 +사용하는 나눔수와 가중치에 따라서 실제로 잡아 낼 수 있는 오류의 비율이 결정된다. 일반적으로 첫번째 종류를 모두 잡기 위해서는 가중치의 모든 숫자가 나눔수와 [[서로소]]가 되어야 하고, 두번째 종류를 모두 잡기 위해서는 인접한 가중치의 차이가 나눔수의 [[인수]]들과 서로 달라야 한다.((즉 나눔수 $$n$$에 대해 [[몫환]] $$\mathbb{Z}/n\mathbb{Z}$$의 [[영인자]]들을 피해야 한다.)) 또한 두 케이스 모두 공통적으로 나눔수가 원래 데이터의 진법과 같거나 커야 하는 건 당연한 얘기다.
 +
 +흔히 사용하는 나눔수인 [[10]]은 인수가 두 개([[2]], [[5]])씩이나 있어서 데이터의 길이가 조금만 커져도 완벽한 가중치를 선택하는 것이 불가능하며, 따라서 애초에 포기하고 차선책을 선택하거나([[국제상품번호]]) 나눔수를 [[11]]을 선택하는 경우가 많다. 후자의 경우 체크 숫자에서 ''10''을 표시할 수 있어야 하므로 이를 나타내는 별도의 자리를 쓰거나([[ISBN]]) 10진법에 끼워 맞추기 위해서 다시 나머지 연산을 하는([[주민등록번호]]) 등의 방법을 사용하곤 한다.((후자의 경우 여전히 믓 잡는 오류가 생기지만, 가중치를 잘 조정하면 오류를 못 잡는 경우를 적절히 랜덤하게 분포시키는 것이 가능하긴 하다.))
 +
 +{{tag>정보이론}}

도쿠위키DokuWiki-custom(rev 9085d92e02)을 씁니다.
마지막 수정 2011-05-30 18:25 | 외부 편집기