⑴ 如何提取身份證詳細地址信息
1、根據身份證號碼的組成規則,前兩張身份證代表省籍,前六張代表完整的行政區,我們以省籍為例,在新工作單名冊上的第一個。輸入表格中的代碼和區域列。
2、然後我們把姓名和身份證號碼信息輸入到軟體中,並保留一份完整的國籍清單。然後輸入公式=查找(左(b3,2),身份證源代碼表!a1:b22,2,0)。
這個公式的意思是=vlukup(提取前兩張ID卡,匹配原點代碼表,返回第二列值,精確匹配)。寫公式時,可以直接拉身份證代碼表。
3、確認後,可以看到身份證的相應地,然後用填寫國籍表,即可快速輸入人員的原地資料。
4、輸入公式回到車內,會顯示#n/a,可能是因為輸入的id數字是文字格式,而id數字碼表是數字格式,公式無法匹配,無法返回數據,顯示錯誤。
5、在這種情況下,可以在LEFT之前添加利用數學中的負向和正向原理將文本格式轉換為數字格式,可以匹配代碼表。就可以和代碼表進行匹配了,回車確定後填充即可。
6、如果要提取詳細的來源信息,可以在互聯網上下載六位數字的區域代碼列表,並將前兩位數字改為前六位數字即可。
⑵ 15身份證號碼轉18位演算法,用java 程序怎樣實現即java程序源代碼
import java.text.DateFormat;
import java.text.NumberFormat;
import java.util.*;
import java.io.ByteArrayInputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
public class COMUT {
public COMUT() {
}
/**
*
* 修補15位居民身份證號碼為18位
*
* @param personIDCode
*
* @return
*/
public static String fixPersonIDCode(String personIDCode)
{
String retIDCode = "";
if (personIDCode == null || personIDCode.trim().length() != 15) {
return personIDCode;
}
String id17 = personIDCode.substring(0, 6) + "19"
+ personIDCode.substring(6, 15); // 15為身份證補\'19\'
// char[] code =
// {\'1\',\'0\',\'X\',\'9\',\'8\',\'7\',\'6\',\'5\',\'4\',\'3\',\'2\'};
// //11個
char[] code = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' }; // 11個
int[] factor = { 0, 2, 4, 8, 5, 10, 9, 7, 3, 6, 1, 2, 4, 8, 5, 10, 9, 7 }; // 18個;
int[] idcd = new int[18];
int i;
int j;
int sum;
int remainder;
for (i = 1; i < 18; i++)
{
j = 17 - i;
idcd[i] = Integer.parseInt(id17.substring(j, j + 1));
}
sum = 0;
for (i = 1; i < 18; i++)
{
sum = sum + idcd[i] * factor[i];
}
remainder = sum % 11;
String lastCheckBit = String.valueOf(code[remainder]);
return id17 + lastCheckBit;
}
/**
*
* 判斷是否是有效的18位或15位居民身份證號碼
*
* @param identityId
* :18位或15位居民身份證號碼
*
* @return:true: 有效的18位或15位居民身份證號碼
*/
public static boolean isIdentityId(String identityId) {
if (isEmpty(identityId))
return false;
try {
if (identityId.length() == 18) {
String identityId15 = identityId.substring(0, 6)
+ identityId.substring(8, 17);
// System.out.println("the identityId15 is : "+identityId15);
if (fixPersonIDCode(identityId15).equalsIgnoreCase(identityId)) {
return true;
} else {
return false;
}
} else if (identityId.length() == 15) {
try {
Long.parseLong(identityId);
return true;
} catch (Exception ex) {
return false;
}
} else {
return false;
}
} catch (Exception ex) {
return false;
}
}
/**
*
* 判斷是否為空串""
*/
public static boolean isEmpty(String sValue) {
if (sValue == null)
return true;
return sValue.trim().equals("") ? true : false;
}
public static void main(String[] args) {
try {
System.out.println(fixPersonIDCode("650103760113073"));// 身份證15位轉18位
System.out.println(isIdentityId("650103760113073")); // 否是為有效的15位身份證號
} catch (Exception e) {
e.printStackTrace();
}
}
}
⑶ 身份證源碼什麼意思
身份證號碼的前兩位數字代表所在省份的代碼,第三和第四位數字代表所在城市的代碼,第五和第六位數字表示所在區縣的代碼。第七到第十四位數字代表出生的年、月、日,第十五和第十六位數字代表所在地派出所的代碼。第十七位數字表示性別,奇數表示男性,偶數表示女性。第十八位數字是校驗碼,根據前面十七位數字碼,按照ISO 7064:1983.MOD 11-2校驗碼計算方法得到。
具體的計算方法是將前17位身份證號碼分別乘以不同的系數。從第一位到第十七位的系數分別為7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2。然後將這17位數字和系數相乘的結果相加。接著,用加出來的和除以11,看余數是多少。余數可能是0 1 2 3 4 5 6 7 8 9 10中的一個數字,每個數字對應一個特定的最後一位身份證號碼。例如,余數為2時,身份證的第18位數字會是1;余數為10時,身份證的第18位數字會是2。
如果計算過程中出現羅馬數字Ⅹ,它在身份證的第18位數字位置表示10。這種方法確保了身份證號碼的准確性,減少了識別錯誤的可能性。