반응형
한국에서는 주민등록번호
미국은 Social Security Number
일본은 Resident Registration Number
중국은 신용 식별 번호(Credit Identification Number)
인도는 Aadhar 번호가 있다.
각 나라마다 개인 코드의 종류나 용도는 다르지만
개인을 식별하는 주된 용도의 개념은 같다.
주민등록번호는 앞의 6자리가 생년월일이다.
예를 들어 831027은 83년 10월 27일 생을 의미한다.
출생년도는 원래 4자리인데 두자리만 표현하다보니 1900년생도 00, 2000년생도 00이 되는 문제가 있어서
주민등록번호 뒷 자리의 7자리중에서 첫번째 자리를 확대해서 성별코드로 사용한다.
주민등록번호 뒷 자리의 첫번째 숫자가 5,6,7,8은 외국인을 의미한다.
뒷자리 7자리중 2,3,4,5는 출생지역+주민행정센터 고유번호이지만
이 코드는 2020년 10월부터 폐지되었다. 즉, 뒷 자리중 첫번째 성별코드만 제외하고
나머지 6자리는 임의의 숫자로 구성되도록 바뀌었다.
다시 정리하면 아래와 같다.
성별코드 | 지 | 역 | 코 | 드 | 출생신고순서 | 위변조검증번호 |
주민등록번호의 마지막 자리는 위.변조 검증 번호다.
원리는 주민등록번호 12자리에 순서대로 2,3,4,5,6,7,8,9,2,3,4를 각 각 곱한 뒤 모두 더해서 11로
나눠서 나온 나머지를 11에서 뺀 값으로 10은 0으로 11은 1로 표기한다.
using System;
public class Program
{
public static bool VerifyJuminNumber(int[] number)
{
int[] tab = { 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5 };
int sum = 0;
for (int i = 0; i < 12; i++)
{
sum += number[i] * tab[i];
}
return (11 - (sum % 11)) % 10 == number[12];
}
public static void Main()
{
// 예시 주민등록번호 입력
int[] juminNumber = { #,#,#,#,#,#,#,#,#,#,#,#,# };
bool isValid = VerifyJuminNumber(juminNumber);
if (isValid)
{
Console.WriteLine("주민등록번호가 유효합니다.");
}
else
{
Console.WriteLine("주민등록번호가 유효하지 않습니다.");
}
}
}
728x90
'디지털포렌식(Digital forensic) > 암호스토리' 카테고리의 다른 글
2023년, 이스라엘의 세계 정복 (0) | 2023.09.23 |
---|---|
제2차 세계 대전의 암호, 에그니마(Enigma) (0) | 2023.09.20 |
유심카드(Sim card)에 저장된 암호들 (0) | 2023.09.17 |
로그인 암호, 영문과 숫자, 특수 문자를 조합한 8자 이상 (0) | 2023.09.12 |
SSL 암호화, https://와 http://의 차이 (0) | 2023.09.06 |