[개발] C#, .Net

[C#] 주민등록번호 유효성 검사하는 코드, 참고코드 있음

  • -
반응형

주민등록번호 유효성 검사하는 코드

 

 한국의 주민등록번호(주민번호)가 유효한지 확인하는 함수입니다. 주민등록번호는 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)가 같으면 유효하다고 판단.
이 함수는 입력된 주민등록번호가 유효한지 여부를 확인하는 데 사용됩니다. 주민등록번호의 형식과 체크섬 계산 방식을 기반으로 유효성을 판단합니다.

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.