JAVA身分証明書番号検査

3941 ワード

プロジェクトのために、このような類を書いて、最近事は比較的に多くて、完備しているでしょう、今誕生日と性別を得るだけでokになりました.
/**
 * @author: [email protected]
 * @createtime: 2010-11-1   10:27:30
 * @Description: shida
 */
public class Utils {
	/**
	 *            ,     
	 * @param num
	 * @return String[] string[0]  ,string[1]  
	 *         ,   null
	 */
	public static String[] getDataByNo(String num) {
		//       
		if (num == null || num.trim().equals("")) {
			return null;
		}
		//        
		int length = num.length();
		//      15 18 
		if (length != 15 && length != 18) {
			return null;
		}
		//       15 ,   18 
		if(length == 15){
			num=uptoeighteen(num);
		}
		//  
		int count = 0;
		// 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 
		char[] numChar = num.substring(0, 17).toCharArray();
		int[] xishu = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
		int[] vi = { 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 };

		for (int i = 0; i < numChar.length; i++) {
			count += (numChar[i] - '0') * xishu[i];
		}
		//   
		int temp = count % 11;
		//           
		String yx = (temp == 2 ? "X" : String.valueOf(vi[temp])).toString();

		String[] data = new String[2];

		if (!yx.equalsIgnoreCase(num.substring(17, 18))) {
			return null;
		} else {
				//     
				data[0] = num.substring(6, 14);
				//     
				data[1] = num.substring(14, 17);
			//                
			if (Integer.parseInt(data[1]) % 2 == 0) {
				data[1] = " ";
			} else {
				data[1] = " ";
			}
		}
		return data;
	}

	public static void main(String[] args) {
		//             ,    ,   
		String[] tests = new String[] { "362522740927501",
				"110227198001050556", "210124198508162281",
				"21031119851130004X", "34052419800101001X" };
		for (int i = 0; i < tests.length; i++) {
			String[] data = getDataByNo(tests[i]);
			if (data == null) {
				System.out.println("       ");
			} else {
				for (int j = 0; j < data.length; j++) {
					System.out.println(data[j]);
				}
			}
			System.out.println("=================");
		}
	}

	// 15         18 
	public static String uptoeighteen(String fifteencardid) {
		String eightcardid = fifteencardid.substring(0, 6);
		eightcardid = eightcardid + "19";
		eightcardid = eightcardid + fifteencardid.substring(6, 15);
		eightcardid = eightcardid + getVerify(eightcardid);
		return eightcardid;
	}

	//    18     
	public static String getVerify(String eightcardid) {
		int remaining = 0;
		int[] wi = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 };
		int[] vi = { 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 };
		int[] ai = new int[18];
		String returnStr = null;
		try {
			if (eightcardid.length() == 18) {
				eightcardid = eightcardid.substring(0, 17);
			}
			if (eightcardid.length() == 17) {
				int sum = 0;
				String k = null;
				for (int i = 0; i < 17; i++) {
					k = eightcardid.substring(i, i + 1);
					ai[i] = Integer.parseInt(k);
					k = null;
				}
				for (int i = 0; i < 17; i++) {
					sum = sum + wi[i] * ai[i];
				}
				remaining = sum % 11;
			}
			returnStr = remaining == 2 ? "X" : String.valueOf(vi[remaining]);
		} catch (Exception ex) {
			return null;
		} finally {
			wi = null;
			vi = null;
			ai = null;
		}
		return returnStr;
	}
}