주민등록번호 유효성 검사하는 코드
한국의 주민등록번호(주민번호)가 유효한지 확인하는 함수입니다. 주민등록번호는 13자리로 구성되며, 이 번호가 유효한지 확인하기 위해 특정한 계산 과정을 거칩니다. 코드를 단계별로 분석해보겠습니다
#region 주민등록번호 유효성 체크(실제 주민번호 맞는지)
public bool IDNO_Check(string IDNO)
{
string Weight = "234567892345"; // 검증값
int Total = 0;
int Chk;
int Rmn;
int Dt;
int wt;
IDNO = IDNO.Trim();
if (string.IsNullOrEmpty(IDNO)) return false;
// '-' 하이픈 제외한 주민등록번호 추출
if (IDNO.Contains("-"))
{
IDNO = IDNO.Substring(0, 6) + IDNO.Substring(7, 7);
}
if (IDNO.Length != 13) return false;
// 주민번호 끝자리 추출
Chk = int.Parse(IDNO.Substring(12, 1));
for (int I = 0; I < 12; I++)
{
Dt = int.Parse(IDNO.Substring(I, 1));
wt = int.Parse(Weight.Substring(I, 1));
Total += Dt * wt;
}
char midChar = IDNO[6]; // 주민등록번호 중간값
if (midChar == '5' || midChar == '6' || midChar == '7' || midChar == '8') // 외국인인 경우
{
Rmn = 13 - (Total % 11);
}
else // 한국인인 경우
{
Rmn = 11 - (Total % 11);
}
if (Rmn > 9)
{
Rmn = Rmn % 10;
}
return Rmn == Chk; // 계산값과 주민번호 끝자리 같은 경우 유효한 주민등록번호
}
#endregion
상세 분석
가중치 정의 및 초기화:
string Weight = "234567892345"; // 가중치
int Total = 0;
int Chk;
int Rmn;
int Dt;
int wt;
Weight: 주민번호 각 자리와 곱할 가중치 값.
Total, Chk, Rmn, Dt, wt: 계산에 필요한 변수들.
입력값 다듬기:
IDNO = IDNO.Trim();
if (string.IsNullOrEmpty(IDNO)) return false;
IDNO.Trim(): 입력값의 앞뒤 공백 제거.
string.IsNullOrEmpty(IDNO): 입력값이 비었거나 null인 경우 유효하지 않다고 판단.
주민번호 형식 맞추기:
if (IDNO.Contains("-"))
{
IDNO = IDNO.Substring(0, 6) + IDNO.Substring(7, 7);
}
주민번호가 -를 포함할 경우 이를 제거.
주민번호 길이 체크:
if (IDNO.Length != 13) return false;
주민번호 길이가 13자가 아니면 유효하지 않다고 판단.
체크섬 값 추출:
Chk = int.Parse(IDNO.Substring(12, 1));
마지막 자리(체크섬 값)을 추출.
가중치를 적용한 합 계산:
for (int I = 0; I < 12; I++)
{
Dt = int.Parse(IDNO.Substring(I, 1));
wt = int.Parse(Weight.Substring(I, 1));
Total += Dt * wt;
}
주민번호의 처음 12자리와 가중치를 곱한 후 합산.
체크섬 계산:
char midChar = IDNO[6];
if (midChar == '5' || midChar == '6' || midChar == '7' || midChar == '8')
{
Rmn = 13 - (Total % 11);
}
else
{
Rmn = 11 - (Total % 11);
}
if (Rmn > 9)
{
Rmn = Rmn % 10;
}
7번째 자리에 따라 체크섬 계산 방식이 달라짐.
7번째 자리가 5, 6, 7, 8일 경우: Rmn = 13 - (Total % 11)
그 외의 경우: Rmn = 11 - (Total % 11)
결과가 9보다 크면 10으로 나눈 나머지 값으로 변경.
유효성 판단:
return Rmn == Chk;
계산된 체크섬 값(Rmn)과 주민번호의 마지막 자리(Chk)가 같으면 유효하다고 판단.
이 함수는 입력된 주민등록번호가 유효한지 여부를 확인하는 데 사용됩니다. 주민등록번호의 형식과 체크섬 계산 방식을 기반으로 유효성을 판단합니다.