신분증 변환 클래스

6628 단어 html알고리즘
알고리즘 설명    인용 내용: 12310 중화 인민공화국 국가 표준 GB 11643 - 1999 에서 공민 신분 번호 에 관 한 규정 에 따라 공민 신분 번 호 는 특징 조합 코드 로 17 자리 디지털 본체 코드 와 1 자리 디지털 검사 코드 로 구성 된다.배열 순 서 는 왼쪽 에서 오른쪽으로 여섯 자리 숫자 주소 코드, 여덟 자리 숫자 생년월일 코드, 세 자리 숫자 순서 코드 와 한 자리 숫자 검사 코드 로 나 뉜 다.주소 코드 는 인 코딩 대상 이 상주 호적 이 있 는 현 (시, 기, 구) 의 행정구 역 코드 를 나타 낸다.생년월일 코드 는 인 코딩 대상 이 태 어 난 해, 월, 일 을 나타 내 는데 그 중에서 연 도 는 네 자리 숫자 로 표시 하고 년, 월, 일 사이 에는 구분자 가 필요 없다.순서 코드 는 같은 주소 코드 가 표 시 된 지역 범위 내 에서 같은 해, 월, 일 에 태 어 난 사람 에 대한 순서 번 호 를 나타 낸다.순서 코드 의 기 수 는 남성 에 게, 우 수 는 여성 에 게 나 뉜 다.검사 코드 는 앞의 17 자리 숫자 에 따라 ISO 7064: 1983. MOD 11 - 2 검사 코드 에 따라 계 산 된 검사 코드 입 니 다.다음은 예 를 들 어 이 계산 방법 을 설명 한다.15 명의 신분증 번 호 는 먼저 출생 년 을 4 명 으로 확대 한다. 간단 한 것 은 19 명 을 추가 하 는 것 이다. 그러나 이것 은 1900 년 전에 태 어 난 사람 에 게 적용 되 지 않 는 다 (이런 수성 이 많 지 않다). 한 남성 시민 신분 번호 의 본체 번 호 는 34052429800101001 이 고 먼저 공식 (1) 에 따라 계산한다.×와 이) (mod 11)...............................................................................ai - i 위치 에 있 는 번호 문자 값 을 표시 합 니 다.와 이 - i 위치 상의 가중 인 자 를 나타 내 고 그 수 치 는 공식 와 이 = 2 의 (n - 1) 차방 mod 11 에 따라 계산 된다.i        18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1 ai         3  4  0  5  2  4  1  9  8  0  0  1  0  1  0  0  1 a1 Wi         7  9 10  5  8  4  2  1  6  3  7  9 10  5  8  4  2  1 ai×Wi    21 36  0 25 16 16  2  9 48  0  0  9  0  5  0  0  2 a1 공식 (1) 에 따라 계산: ∑ (ai×Wi) =(21+36+0+25+16+16+2+9+48++0+0+9+0+5+0+0+2) = 189 189 ÷ 11 = 17 + 2/11 ∑(ai×Wi) (mod 11) = 2 그 다음 에 계산 한 결과 에 따라 아래 표 에서 해당 하 는 검사 코드 를 찾 아 냈 는데 그 중에서 X 는 계산 결 과 를 10: ∑ (ai 라 고 표시 했다.×WI)(mod 11) 0  1  2  3  4  5  6  7  8  9 10 체크 코드 문자 값 ai   1  0  X  9  8  7  6  5  4  3  2. 상기 표 에 따 르 면 계산 결과 2 인 체크 코드 를 찾 아 냈 기 때문에 해당 인원 의 시민 신분 번 호 는 34052429800101001 X 여야 합 니 다. a [0] * 7 + a [1] * 9 + a [2] * 10 + a [3] * 5 + a [4] * 8 + a [5] * 4 + a [6] * 2 + a [7] * 1 + a [8] * 6 + a [9] * 3 + a [10] * 7 + a [11] * 9 + a [12] * 10 + a [13] * 5 + a [14] * 8 + a [15] * 4 + a [16] * 2
 
java 클래스:
public class CardConverter {
	private static final String BIRTH_YEAR = "19";
	private static final int[] WI = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10,
			5, 8, 4, 2, 1 };

	/**
	 * 18 15
	 * @param strCard18
	 * @return
	 */
	public static String convert18to15(String strCard18) {
		if (strCard18 == null || strCard18.length() != 18) {
			return strCard18;
		}
		String strCard15 = strCard18.substring(0, 6)
				+ strCard18.substring(8, 17);
		return strCard15;
	}

	/**
	 * 15 18
	 * @param strCard15
	 * @return
	 */
	public static String convert15to18(String strCard15) {
		return convert15to18(strCard15, null);
	}

	/**
	 * 15 18
	 * @param strCard15
	 * @param strYear
	 * @return
	 */
	public static String convert15to18(String strCard15, String strYear) {
		if (strCard15 == null || strCard15.length() != 15) {
			return strCard15;
		}
		String year = BIRTH_YEAR;
		if (strYear != null && strYear.length() == 2) {
			year = strYear;
		}

		// 17  
		String strCard17 = strCard15.substring(0, 6) + year
				+ strCard15.substring(6);

		return strCard17 + getLastNumber(strCard17);
	}

	/**
	 *       
	 * @param strCard17
	 * @return
	 */
	private static String getLastNumber(String strCard17) {
		String str18 = null;

		int iNum = 0;
		for (int i = 0; i < 17; i++) {
			iNum += Integer.parseInt(strCard17.substring(i, i + 1)) * WI[i];
		}
		iNum = iNum % 11;

		switch (iNum) {
		case 0:
			str18 = "1";
			break;
		case 1:
			str18 = "0";
			break;
		case 2:
			str18 = "X";
			break;
		case 3:
			str18 = "9";
			break;
		case 4:
			str18 = "8";
			break;
		case 5:
			str18 = "7";
			break;
		case 6:
			str18 = "6";
			break;
		case 7:
			str18 = "5";
			break;
		case 8:
			str18 = "4";
			break;
		case 9:
			str18 = "3";
			break;
		case 10:
			str18 = "2";
			break;
		}
		return str18;
	}

	/**
	 *   
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println(CardConverter.convert18to15("310113198407291234"));
		System.out.println(CardConverter.convert15to18("310113840729123","20"));
		System.out.println("    :");
		long begin = System.currentTimeMillis();
		int count = 100000;
		for (int i = 0; i < count; i++) {
			CardConverter.convert15to18("310113840729123");
		}
		long end = System.currentTimeMillis();
		System.out.println(end - begin);
	}
}

 
js 방법:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE>js:15  18    </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
 </HEAD>

 <BODY>

 
/*
	@card 15    
	@year      19    19
*/
function cid15To18(card,year) {
	if(!card || card.length != 15){
		return "";
	};
	var year = year?year:"19";
	var fisrt17 = card.substring(0,6)+year+card.substring(6);
	return fisrt17 + getLastNum(fisrt17);
}

/**
	   17       18 
*/
function getLastNum(fisrt17) {
	var lastNumber;
	var id = fisrt17
	var getNum=eval(id.charAt(0)*7+id.charAt(1)*9+id.charAt(2)*10+id.charAt(3)*5+id.charAt(4)*8+id.charAt(5)*4+id.charAt(6)*2+id.charAt(7)*1+id.charAt(8)*6+id.charAt(9)*3+id.charAt(10)*7+id.charAt(11)*9+id.charAt(12)*10+id.charAt(13)*5+id.charAt(14)*8+id.charAt(15)*4+id.charAt(16)*2);
	getNum=getNum%11;
	switch (getNum) {
	case 0 :
	lastNumber="1";
	break;
	case 1 :
	lastNumber="0";
	break;
	case 2 :
	lastNumber="X";
	break;
	case 3 :
	lastNumber="9";
	break;
	case 4 :
	lastNumber="8";
	break;
	case 5 :
	lastNumber="7";
	break;
	case 6 :
	lastNumber="6";
	break;
	case 7 :
	lastNumber="5";
	break;
	case 8 :
	lastNumber="4";
	break;
	case 9 :
	lastNumber="3";
	break;
	case 10 :
	lastNumber="2";
	break;
	}
	return lastNumber;
}

function $(id) {
	return document.getElementById(id);
}

function convert(value){
	var rValue = cid15To18(value);
	if(rValue == "") {
		alert("        ,   15    ");
	} else {
		$("txtCard18").value = rValue;
	}
}
//-->
</SCRIPT>
   15    <input id="txtCard15" type="text" /><input type="button" value="  " onclick="convert($('txtCard15').value)"/>
<br/>
18    <input id="txtCard18" type="text" onclick=""/>
 </BODY>
</HTML>

좋은 웹페이지 즐겨찾기