본문으로 건너뛰기

룬 알고리즘 계산기 - 신용카드 및 IMEI 검증

룬 알고리즘을 이용해 신용카드, IMEI, 캐나다 사회보험번호 같은 ID 번호를 검증하는 무료 계산기입니다. 모드 10 체크섬 방식을 사용해 번호가 유효한지 온라인에서 즉시 확인하거나, 소프트웨어 테스트용으로 유효한 번호를 생성할 수 있습니다.

루한 알고리즘 계산기

작업

숫자가 루한 모드 10 검증을 통과하는지 확인

로딩 계산기...
📚

문서화

룬 알고리즘이란?

룬 알고리즘은 모듈로 10 알고리즘이라고도 하며, 일련의 숫자가 유효한 식별 번호일 수 있는지 확인하는 공식입니다. 신용 카드 번호, 휴대전화의 IMEI 번호 및 기타 ID 코드에서 입력 오류가 오류를 일으키기 전에 찾아내는 데 사용됩니다. IBM 엔지니어 한스 페터 룬은 1954년에 출원된 특허에서 이 방법을 설명했습니다.

이 알고리즘은 번호가 실제로 존재하거나 활성 상태인지 증명하지 않습니다. 숫자가 예상된 패턴을 따르는지만 확인합니다. 카드 번호가 룬 검사를 통과하더라도 가짜이거나 만료되었거나 결제에 사용할 자금이 없을 수 있습니다.

룬 체크섬 계산 방법

이 검사는 번호의 숫자를 오른쪽에서 왼쪽으로 읽어 적용합니다.

  1. 오른쪽에서 두 번째 숫자부터 시작하여 하나씩 건너뛴 모든 숫자를 두 배로 만듭니다.
  2. 숫자를 두 배로 한 결과가 9보다 크면 그 결과에서 9를 뺍니다. (이는 결과의 두 숫자를 더하는 것과 같으므로 16은 1 + 6 = 7이 되며, 또는 16 − 9 = 7로 계산할 수도 있습니다.)
  3. 두 배로 만든 숫자(조정 후)와 그대로 둔 숫자를 모두 더합니다.
  4. 합계가 10으로 나누어떨어지면 번호는 유효합니다. 그렇지 않으면 유효하지 않습니다.

사업자가 새 ID 번호를 발급할 때는 같은 단계를 역순으로 사용합니다. 마지막 숫자를 제외한 모든 숫자를 정하고 검사를 실행한 다음, 합계가 10으로 나누어떨어지도록 마지막 "검사 숫자"를 선택합니다.

계산 예시: 카드 번호 검증

테스트 번호 4532015112830366을 사용해 보겠습니다.

  1. 오른쪽에서 왼쪽으로 읽은 숫자: 6, 6, 3, 0, 3, 8, 2, 1, 1, 5, 1, 0, 2, 3, 5, 4
  2. 두 번째 숫자마다 두 배로 만들기: 6, 12, 3, 0, 3, 16, 2, 2, 1, 10, 1, 0, 2, 6, 5, 8
  3. 9를 초과하는 결과에서 9 빼기: 6, 3, 3, 0, 3, 7, 2, 2, 1, 1, 1, 0, 2, 6, 5, 8
  4. 모두 더하기: 6+3+3+0+3+7+2+2+1+1+1+0+2+6+5+8 = 50
  5. 50은 10으로 나누어떨어지므로 번호는 유효합니다.

계산 예시: 유효하지 않은 번호

IMEI 번호에 사용되는 형식의 15자리 숫자인 490154203237517을 사용해 보겠습니다.

같은 단계를 실행하면 합계는 59가 됩니다. 59는 10으로 나누어떨어지지 않으므로 이 번호는 유효하지 않습니다.

유효한 번호로 바꾸려면 마지막 숫자만 변경하면 됩니다. 가능한 마지막 숫자를 각각 시험하면 마지막 숫자가 8일 때 합계가 60이 되고, 이는 10으로 나누어떨어집니다. 따라서 490154203237518은 유효한 룬 번호이며, 0부터 9까지의 다른 모든 마지막 숫자(8 제외)는 유효하지 않은 번호를 만듭니다.

이 계산기 사용 방법

계산기에는 Action 버튼으로 선택하는 두 가지 모드가 있습니다.

검증은 입력하는 대로 번호를 확인합니다. 버튼을 누를 필요가 없습니다. 필드에 숫자가 입력되는 즉시 결과가 나타나며, 그 아래의 단계별 분석 에는 각 숫자와 두 배로 만든 뒤 조정했을 때 해당 숫자가 기여하는 값, 그리고 합계가 표시됩니다.

생성은 검사를 통과하는 번호를 만듭니다. 필드에 이미 입력된 숫자는 새 번호의 시작 부분으로 그대로 유지됩니다. 계산기는 나머지 부분을 무작위 숫자로 채우고 검사 숫자를 덧붙입니다. 결과는 16자리이며, 일반적인 결제 카드 번호의 길이입니다. 단, 입력한 숫자가 이미 16자리 이상이면 결과는 입력된 길이보다 한 자리 더 깁니다.

입력값의 공백, 대시, 마침표는 무시되므로 "4532 0151 1283 0366"과 "4532-0151-1283-0366"은 숫자만 입력한 경우와 같은 방식으로 읽힙니다. 그 밖의 문자(예: 문자)는 오류 메시지와 함께 거부됩니다.

룬 알고리즘이 사용되는 곳

  • 결제 카드. Visa, Mastercard, American Express 및 기타 네트워크는 전체 번호가 룬 검사를 통과하도록 카드 번호를 구성합니다. 결제 양식은 결제 처리업체에 연락하기 전에 잘못 입력된 숫자를 찾아내는 데 이 검사를 사용할 수 있습니다.
  • IMEI 번호. 휴대전화 및 기타 이동통신 기기에 할당되는 15자리 식별자에는 룬 검사 숫자가 포함됩니다.
  • 캐나다 사회보험번호. 9자리 SIN에도 같은 검사가 사용됩니다.
  • 미국 국가 의료제공자 식별자(NPI). 미국의 의료 제공자는 룬 기반 검사로 검증되는 10자리 NPI를 받습니다.

룬 알고리즘으로 검출할 수 없는 오류

이 알고리즘은 어떤 숫자인지 또는 어디에 나타나는지와 관계없이 숫자 하나를 잘못 입력한 경우를 항상 찾아냅니다. 또한 인접한 숫자를 서로 바꾼 모든 경우도 찾아내지만(예: "93" 대신 "39" 입력), 한 가지 경우는 예외입니다. 서로 인접한 0과 9를 바꾸는 경우로, 예를 들어 "09"가 "90"이 되는 경우입니다.

또한 반복된 숫자 쌍을 다른 반복 숫자 쌍으로 바꾸는 세 종류의 "쌍둥이" 오류를 놓칩니다. 22를 55로 읽는 경우, 33을 66으로 읽는 경우, 44를 77으로 읽는 경우입니다. 이러한 누락 사례는 알려져 있고 범위가 좁으므로 룬 검사는 일반적인 입력 오류를 찾아내는 데는 신뢰할 수 있지만, 그 자체로 완전한 오류 검출 시스템으로 간주되지는 않습니다.

룬 검사는 보안 검사가 아닙니다

룬 검사는 사기가 아니라 우발적인 데이터 입력 오류를 찾아내도록 설계되었습니다. 검사를 통과한 번호는 수학적으로 올바른 형식을 갖췄을 뿐입니다. 실제 결제 보안은 룬 검사 이후에 추가되는 카드의 CVV 코드, 주소 확인, 3-D Secure 인증과 같은 다른 계층에 의존합니다. 룬 검사는 이러한 더 느린 검사를 실행하기 전에 수행하는 단순하고 비용이 낮은 첫 번째 필터일 뿐입니다.

JavaScript에서 번호 검증하기

1function isValidLuhn(number) {
2  const digits = number.replace(/\D/g, '').split('').map(Number);
3  if (digits.length === 0) return false;
4
5  let sum = 0;
6  let doubleDigit = false;
7  for (let i = digits.length - 1; i >= 0; i--) {
8    let d = digits[i];
9    if (doubleDigit) {
10      d *= 2;
11      if (d > 9) d -= 9;
12    }
13    sum += d;
14    doubleDigit = !doubleDigit;
15  }
16  return sum % 10 === 0;
17}
18

빈 입력에 대한 보호가 중요한 이유는 빈 문자열의 숫자 합이 0이고 0은 10으로 나누어떨어지기 때문입니다. 따라서 이 보호가 없으면 함수는 아무것도 입력되지 않은 값을 유효한 번호로 처리하게 됩니다. 번호를 검사하는 대신 검사 숫자를 찾으려면 검사 숫자 앞의 숫자에 같은 반복문을 실행하되, 그 숫자들 중 마지막 숫자부터 두 배로 만들고, 그다음 (10 - sum % 10) % 10을 계산합니다.

자주 묻는 질문

룬 알고리즘은 어디에 사용되나요?

룬 알고리즘은 신용 카드 번호, IMEI 번호, 캐나다 SIN과 같은 식별 번호가 내부적으로 일관되는지 확인합니다. 처리 오류가 발생하기 전에 잘못 입력되거나 순서가 뒤바뀐 숫자를 찾아냅니다.

룬 알고리즘은 오류를 얼마나 정확하게 찾아내나요?

숫자 하나를 잘못 입력한 모든 경우와 인접한 숫자 두 개의 순서가 바뀐 거의 모든 경우를 찾아냅니다. 놓치는 유일한 순서 교환은 서로 인접한 0과 9입니다. 또한 세 가지 특정 "쌍둥이" 치환을 놓칩니다. 22를 55로 바꾸는 경우, 33을 66으로 바꾸는 경우, 44를 77로 바꾸는 경우입니다.

유효한 룬 번호라면 카드가 실제로 존재한다는 뜻인가요?

아닙니다. 검사는 숫자가 예상된 패턴에 맞는지만 확인합니다. 카드가 존재하는지, 사용 가능한지, 자금이 있는지는 알려 주지 않습니다. 사업자는 이를 위해 CVV 코드와 같은 별도의 검사를 추가합니다.

컴퓨터 없이 룬 검사를 할 수 있나요?

가능합니다. 두 배, 뺄셈, 덧셈만 필요하므로 손으로 계산하거나 간단한 계산기를 사용할 수 있습니다. 이는 디지털 컴퓨터가 널리 보급되기 전 천공 카드 시대를 염두에 둔 원래 설계의 일부였습니다.

생성된 번호는 실제 카드 번호인가요?

아닙니다. 생성기는 룬 검사를 만족하는 숫자 문자열만 만듭니다. 이 번호는 입력 양식을 테스트하기 위한 것입니다. 은행에서 발급한 번호가 아니며 무엇인가를 결제하는 데 사용할 수 없습니다.

왜 모드 10 알고리즘이라고 하나요?

마지막 단계에서 합계가 10으로 나누어떨어지는지 확인하기 때문이며, 수학적으로는 "sum mod 10 = 0"으로 표시합니다. "Mod"는 나눗셈 후 남는 나머지를 뜻하는 modulo를 줄인 말입니다.

룬 알고리즘은 누가 발명했나요?

IBM 엔지니어 한스 페터 룬은 1954년에 출원된 특허에서 이를 설명했습니다(1960년에 US 특허 2,950,048로 등록). 그는 컴퓨터를 이용한 초기 텍스트 색인 작업으로도 알려져 있습니다.