[Delphi Tip] 주민/사업자번호 유효성 체크

반응형
반응형

[델파이 팁] 주민등록번호 및 사업자등록번호 유효성 검사하는 함수

주민등록번호 및 사업자번호 유효성 체크하는 함수 입니다.

 

함수

// 13자리 경우 -> 주민등록번호 체크, 10자리 경우 -> 사업자등록번호 체크
function TForm1.CheckIDNo(const aIDNo: String; aNullIsError: Boolean): Boolean;
var
  TempStr: String;
  Index, LastDigit: Integer;
begin
  Result := False;
  TempStr := GetOnlyNumber(aIDNo);
  // 길이가 0일 경우(입력 안한 경우)
  if Length(TempStr) = 0 then
  begin
    // null을 에러 처리 하라면 에러, null을 에러 처리 하지 말라면 정상 리턴
    Result := not aNullIsError;
    Exit;
  end; // if Length(TempStr) = 0 then  

  // 체크디지트 구하기
  LastDigit := StrToInt(TempStr[Length(TempStr)]);

  // 주민등록번호 검사
  if Length(TempStr) = 13 then
  begin
    Index := StrToInt(TempStr[ 1]) * 2 +
             StrToInt(TempStr[ 2]) * 3 +
             StrToInt(TempStr[ 3]) * 4 +
             StrToInt(TempStr[ 4]) * 5 +
             StrToInt(TempStr[ 5]) * 6 +
             StrToInt(TempStr[ 6]) * 7 +
             StrToInt(TempStr[ 7]) * 8 +
             StrToInt(TempStr[ 8]) * 9 +
             StrToInt(TempStr[ 9]) * 2 +
             StrToInt(TempStr[10]) * 3 +
             StrToInt(TempStr[11]) * 4 +
             StrToInt(TempStr[12]) * 5;
    Result := (((11 - (Index mod 11)) mod 10) = LastDigit);
  end 
  // 사업자번호 검사
  else if Length(TempStr) = 10 then
  begin
    Index := StrToInt(TempStr[9]) * 5;
    Index := (Index div 10) + (Index mod 10);
    Index := Index +
             StrToInt(TempStr[1]) + StrToInt(TempStr[4]) + StrToInt(TempStr[7]) +
            (StrToInt(TempStr[2]) + StrToInt(TempStr[5]) + StrToInt(TempStr[8])) * 3 +
            (StrToInt(TempStr[3]) + StrToInt(TempStr[6])) * 7;
    Index := 10 - (Index mod 10);
    Result := (Index = LastDigit);
  end; 
end;
// 입력문자 대해 숫자만 찾기
function TForm1.GetOnlyNumber(const AValue: String): String;
var
  ii: Integer;
begin
  Result := EmptyStr;
  for ii := Length(AValue) downto 1 do
    if (AValue[ii] in ['0'..'9']) or
       ((ii = 1) and (AValue[ii] = '-')) then
      Insert(AValue[ii], Result, 1);
end;

 

구현

델파이 폼파일


procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    if CheckIDNo(Edit1.Text) then
      Edit2.Text := '성공'
    else
      Edit2.Text := '오류';
  except
  end;
end;

 

결과

결과

반응형

댓글