[꼭대기] 신분증 검증 의 검증 코드 알고리즘 검증
import java.util.Calendar;
import java.util.Scanner;
public class ValidateID {
public static void main(String[] args) {
ValidateID vid=new ValidateID();
System.out.println(" :");
Scanner sc = new Scanner(System.in);
String id = sc.nextLine();
vid.validateLastNum(id);
}
/*
*
*
* : ∑(a[i]*W[i]) mod 11 ( i = 2, 3, ..., 18 ) "*" :
* i: , , 18, 1。 a[i]: i W[i]:
* i W[i] = 2^(i-1) mod 11 :R = ∑(a[i]*W[i]) mod 11 ( i = 2, 3, ...,
* 18 ) C = R C : R:0 1 2 3 4 5 6 7 8 9 10 C:1 0 X 9 8 7
* 6 5 4 3 2 X 10, 10 X, X。
*/
public boolean validateLastNum(String strId) {
// 18
if (strId.length() != 18) {
return false;
}
// String StringBuffer reverse()
StringBuffer sb = new StringBuffer(strId);
//
sb.reverse();
// ,
String id = new String(sb);
// , false
try {
Long.parseLong(id);
} catch (Exception e) {
// System.out.println(" ");
return false;
}
//
int sum = 0;
int C = 0;
int[] W = new int[17];
int[] a = new int[17];
for (int i = 2; i < 19; i++) {
W[i - 2] = (int) (Math.pow(2, i - 1) % 11);
a[i - 2] = Integer.parseInt(id.substring(i - 1, i));
sum += (a[i - 2] * W[i - 2]);
}
int R = sum % 11;
// , R:C ,
if (R == 0) {
C = 1;
}
if (R == 1) {
C = 0;
}
if (R == 2) {
C = 10;
}
if (R > 2) {
C = 12 - R;
}
// ,
String lastChar = id.substring(0, 1);
//
int lastNum = Integer.parseInt(lastChar);
// , ,
if (lastNum != C) {
// R=2 C=10, 10 X ,
if (C == 10 && lastChar.equals("X")) {
// System.out.println(" ");
return true;
}
// System.out.println(" ");
return false;
}
// System.out.println(" ");
return true;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.