[꼭대기] 신분증 검증 의 검증 코드 알고리즘 검증

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;
	}

}

좋은 웹페이지 즐겨찾기