【身份證最後一位神秘X的由來】身份證中的“冷知識”1999年的今天,《國務院關於實行公民身份號碼制度的決定》被髮布,當年10月1日實施。為什麼有的有X?這位數是根據前17位計算出的校驗碼。如某人尾號是0-9,不會有X,如是10,則用X代替。Ⅹ是羅馬數字的10,這能保證身份證號不多位。 ...
【身份證最後一位神秘X的由來】身份證中的“冷知識”
1999年的今天,《國務院關於實行公民身份號碼制度的決定》被髮布,當年10月1日實施。為什麼有的有X?這位數是根據前17位計算出的校驗碼。如某人尾號是0-9,不會有X,如是10,則用X代替。Ⅹ是羅馬數字的10,這能保證身份證號不多位。
/// <summary> /// 轉換15位身份證號碼為18位 /// </summary> /// <param name="oldIDCard">15位的身份證</param> /// <returns>返回18位的身份證</returns> private string IDCard15To18(string oldIDCard) { int iS = 0; //加權因數常數 int[] iW = new int[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 }; //校驗碼常數 string LastCode = "10X98765432"; //新身份證號 string newIDCard; newIDCard = oldIDCard.Substring(0, 6); //填在第6位及第7位上填上‘1’,‘9’兩個數字 newIDCard += "19"; newIDCard += oldIDCard.Substring(6, 9); //進行加權求和 for (int i = 0; i < 17; i++) { iS += int.Parse(newIDCard.Substring(i, 1)) * iW[i]; } //取模運算,得到模值 int iY = iS % 11; //從LastCode中取得以模為索引號的值,加到身份證的最後一位,即為新身份證號。 newIDCard += LastCode.Substring(iY, 1); return newIDCard; }