국가별 신원 번호 길이는 나라마다 크게 다르고, 같은 나라 안에서도 체계가 바뀐 적이 있습니다. 어떤 번호는 숫자로만 되어 있고 어떤 번호는 글자를 섞으며, 어떤 번호는 생년월일을 품고 있습니다. 이 글에서는 이런 차이가 어디서 오는지, 검사용 숫자가 하는 일은 무엇인지, 그리고 시험 데이터를 만들 때 길이를 어떻게 다루어야 하는지 살펴봅니다.
나라마다 번호 길이가 다른 이유
신원 번호는 각 나라가 자기 행정 편의에 맞게 만든 것입니다. 인구가 많으면 자릿수가 늘고, 다른 서류와 연결하려면 앞에 접두어를 붙이고, 손으로 옮겨 적는 일이 많으면 검사용 숫자를 뒤에 답니다. 국제적으로 길이를 맞추는 표준이 있어서 그걸 따른 결과가 아니라, 나라마다 필요한 만큼 정한 결과가 지금의 차이입니다.
그래서 신원 번호는 몇 자리라고 한 줄로 답할 수 없습니다. 어떤 나라는 자릿수를 고정하고, 어떤 나라는 발급 목적에 따라 여러 체계를 함께 운영합니다. 같은 나라도 발급 시기에 따라 형식이 달라진 경우가 있어서, 오래된 값을 다루는 화면은 두 가지 형식을 모두 견뎌야 합니다.
길이는 나라마다 어떻게 다른가요?
숫자만 쓰는 체계는 옮겨 적기 쉽고 자릿수를 세기만 하면 됩니다. 미국의 사회 보장 번호는 아홉 자리이고, 캐나다의 사회 보험 번호도 아홉 자리입니다. 브라질의 개인 세금 번호는 열한 자리이고 마지막 두 자리가 계산으로 만들어진 검사 숫자입니다.
글자를 섞는 체계는 같은 길이로 더 많은 조합을 만들 수 있습니다. 대신 대문자와 소문자를 구분할지, 헷갈리기 쉬운 글자를 빼 둘지 같은 규칙이 함께 필요합니다. 사람이 옮겨 적을 때 숫자 영과 알파벳 오를 헷갈리는 문제는 어느 쪽 체계나 따라다닙니다.
같은 나라 안에서도 목적에 따라 번호가 여러 개인 경우가 있습니다. 세금을 위한 번호와 주민 등록을 위한 번호가 따로 있고, 어느 쪽을 받을지는 화면마다 다릅니다. 시험 데이터에서 두 번호를 같은 값으로 채우면 한쪽을 검사하는 의미가 사라지므로, 서로 다른 값으로 두고 각각의 규칙을 확인하는 편이 좋습니다.
검사 숫자는 무엇을 하나요?
많은 체계가 마지막 한 자리나 두 자리를 계산으로 만들어 붙입니다. 가중치를 곱해 더한 뒤 나머지를 쓰는 방식이 흔한데, 한 자리를 잘못 적거나 이웃한 두 자리를 바꿔 적었을 때 이를 알아채기 위한 장치입니다.
다만 검사 숫자가 맞는다는 사실은 그 번호가 어떤 사람에게 발급되었다는 뜻이 아닙니다. 계산 규칙은 공개되어 있으므로 규칙을 아는 사람은 형식이 맞는 번호를 얼마든지 만들 수 있습니다. 그래서 검사 숫자 통과를 신원 확인의 근거로 삼으면 안 됩니다.
생년월일이 번호 안에 들어가는 경우
북유럽의 여러 나라는 개인 식별 번호 안에 생년월일을 넣습니다. 이런 체계에서는 번호만 보고 나이를 어림할 수 있지만, 시험 데이터를 만들 때 두 가지를 조심해야 합니다. 하나는 번호 안의 날짜와 기록의 생년월일이 어긋나지 않게 하는 일이고, 다른 하나는 실제 사람의 번호와 겹치지 않게 하는 일입니다.
날짜가 들어가는 체계는 윤년과 세기 표기 같은 규칙도 함께 따라옵니다. 연도를 두 자리로 적는 체계는 어느 세기를 뜻하는지 구분하는 규칙을 따로 두기도 하므로, 검사할 때 이 규칙까지 반영해야 합니다.
날짜가 들어가지 않는 체계에서는 번호만으로 나이를 어림할 수 없습니다. 나이가 필요한 화면이라면 생년월일을 따로 받아 계산해야 하고, 번호와 생년월일이 서로 다른 곳에서 온 값이라면 둘이 어긋날 수 있습니다. 두 값의 짝을 확인하는 검사를 함께 두면 이런 어긋남을 일찍 발견할 수 있습니다.
길이를 고정해 두면 무엇이 깨지나요?
입력란의 최대 길이를 열 자리로 정해 두면 더 긴 번호를 쓰는 나라의 값은 저장 단계에서 잘립니다. 잘린 값은 오류를 내지 않고 그대로 저장되므로, 나중에 조회가 되지 않는 이상한 데이터가 남습니다.
반대로 최소 길이를 크게 잡으면 짧은 번호를 쓰는 나라의 정상 값을 거부합니다. 한 나라만 보고 정한 길이를 전체에 적용하는 것이 가장 흔한 원인이고, 지원 국가를 늘리는 순간 문제가 드러납니다.
자릿수를 나눠 입력받는 화면도 같은 문제를 만듭니다. 나라마다 끊는 위치가 다르므로 칸을 고정하면 값을 옮겨 담기 어려워지고, 결국 한 칸에 몰아넣는 예외가 생깁니다. 칸을 나눌 때는 나누지 않은 표기를 함께 받아 두는 편이 안전합니다.
신원 생성기로 여러 나라 기록 비교하기
신원 생성기에서는 국가를 바꿔 가며 같은 종류의 기록을 만들 수 있습니다. 브라질을 골랐다면 브라질 국가 페이지에서 주소와 번호 형식을 함께 확인해 볼 수 있습니다.
여기서 만들어지는 값은 알고리즘이 합성한 것이며 실존 인물과 무관합니다. 시험용으로만 쓰고 실제 인물을 사칭하는 데 사용하지 마세요.
개발자를 위한 메모: 길이와 문자 집합을 데이터로 관리하라
- 길이와 문자 집합은 코드가 아니라 국가별 데이터로 둡니다. 규칙이 바뀌었을 때 배포 없이 고칠 수 있습니다.
- 검증을 두 단계로 나눕니다. 먼저 어느 나라의 어떤 규칙을 적용할지 고르고, 그다음 그 규칙으로 값을 검사합니다.
- 규칙을 고르지 못하는 나라는 거부하지 말고 형식을 확인할 수 없음이라는 상태로 저장합니다. 거부하면 정상 값을 잃고, 조용히 통과시키면 나중에 원인을 찾기 어려워집니다.
- 검사 숫자는 있는 체계에서만 확인합니다. 모든 체계에 검사 숫자가 있는 것은 아니므로 없다고 오류를 내면 안 됩니다.
- 길이가 다른 값이 한 목록에 섞이는 화면을 시험에 넣습니다. 잘림과 줄바꿈 문제는 그때 드러납니다.
- 공백과 붙임표를 어떻게 다룰지 먼저 정합니다. 같은 번호를 다르게 적은 값이 두 건으로 저장되는 일을 막을 수 있습니다.
- 저장 길이는 지원할 나라 가운데 가장 긴 값에 맞춥니다. 여유를 조금 두면 새 나라를 추가할 때 스키마를 고치지 않아도 됩니다.
- 화면에 보여 줄 때 형식을 다듬는 처리는 표시 단계에서만 합니다. 저장값을 다듬으면 원래 입력과 달라집니다.
다음 단계
여러 나라를 함께 다루는 화면이라면 신원 생성기에서 서로 다른 국가의 기록을 나란히 만들어 보고, 저장 길이와 표시 순서가 모두 견디는지 확인해 보세요. 미국 번호의 세부 규칙은 미국 SSN 형식과 예약 구간에서 따로 다룹니다.