高中作文网

台湾身份证号码的验证规则(精选4篇)

时间: 2023-07-17 栏目:写作范文

JavaScript正则表达式验证身份证号码(From Jeskitt 篇1

From Jeskitt JavaScript正则表达式验证身份证号码(From Jeskitt)

//身份证省份 var vcity={ 11:”北京”,12:”天津”,13:”河北”,14:”山西”,15:”内蒙古”, 21:”辽宁”,22:”吉林”,23:”黑龙江”,31:”上海”,32:”江苏”,

33:”浙江”,34:”安徽”,35:”福建”,36:”江西”,37:”山东”,41:”河南”, 42:”湖北”,43:”湖南”,44:”广东”,45:”广西”,46:”海南”,50:”重庆”, 51:”四川”,52:”贵州”,53:”云南”,54:”西藏”,61:”陕西”,62:”甘肃”,

63:”青海”,64:”宁夏”,65:”新疆”,71:”台湾”,81:”香港”,82:”澳门”,91:”国外” };

//身份证验证

var checkCard = function(card) { var card = card;//card为用户输入的身份证号码 //是否为空 if(card === ”) { alert(„请输入身份证号,身份证号不能为空‟); return false; } //校验长度,类型

if(isCardNo(card) === false) { alert(„您输入的身份证号码不正确,请重新输入‟); return false; } //检查省份

if(checkProvince(card) === false) { alert(„您输入的身份证号码不正确,请重新输入‟); return false; } //校验生日

if(checkBirthday(card) === false) { alert(„您输入的身份证号码生日不正确,请重新输入‟); return false; } //检验位的检测

if(checkParity(card) === false)

From Jeskitt

From Jeskitt { alert(„您的身份证校验位不正确,请重新输入‟); return false; } // alert(„OK‟); return true; }; //检查号码是否符合规范,包括长度,类型 var isCardNo = function(card) { //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X var reg = /(^d{15}$)|(^d{17}(d|X)$)/; if(card) === false) { alert(“位数不对”); return false; } return true; };

//取身份证前两位,校验省份

var checkProvince = function(card) { var province = card、substr(0,2); if(vcity[province] == undefined) { return false; } return true; };

//检查生日是否正确

var checkBirthday = function(card) { var len = card、length; //身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字 if(len == ‟15′) { var re_fifteen = /^(d{6})(d{2})(d{2})(d{2})(d{3})$/; var arr_data = card、match(re_fifteen);

From Jeskitt

From Jeskitt var year = arr_data[2]; var month = arr_data[3]; var day = arr_data[4]; var birthday = new Date(‟19′+year+‟/‟+month+‟/‟+day); return verifyBirthday(‟19′+year,month,day,birthday); } //身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X,注意是大写的X if(len == ‟18′) { var re_eighteen = /^(d{6})(d{4})(d{2})(d{2})(d{3})([0-9]|X)$/; var arr_data = card、match(re_eighteen); var year = arr_data[2]; var month = arr_data[3]; var day = arr_data[4]; var birthday = new Date(year+‟/‟+month+‟/‟+day); return verifyBirthday(year,month,day,birthday); } return false; };

//校验日期

var verifyBirthday = function(year,month,day,birthday) { var now = new Date(); var now_year = (); //年月日是否合理

if(birthday、getFullYear() == year && (birthday、getMonth() + 1) == month && birthday、getDate() == day) { //判断年份的范围(3岁到100岁之间) var time = now_year – year; if(time>= 3 && time<= 100) { return true; } return false; } return false; };

From Jeskitt

From Jeskitt //校验位的检测

var checkParity = function(card) { //15位转18位

card = changeFivteenToEighteen(card); var len = card、length; if(len == ‟18′) { var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); var arrCh = new Array(‟1′, ‟0′, „X‟, ‟9′, ‟8′, ‟7′, ‟6′, ‟5′, ‟4′, ‟3′, ‟2′);//注意是大写的X var cardTemp = 0, i, valnum; for(i = 0; i<17; i ++) { cardTemp += card、substr(i, 1) * arrInt[i]; } valnum = arrCh[cardTemp % 11]; if (valnum == card、substr(17, 1)) { return true; } return false; } return false; };

//15位转18位身份证号

var changeFivteenToEighteen = function(card) { if(card、length == ‟15′) { var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); var arrCh = new Array(‟1′, ‟0′, „X‟, ‟9′, ‟8′, ‟7′, ‟6′, ‟5′, ‟4′, ‟3′, ‟2′);//注意是大写的X var cardTemp = 0, i; card = card、substr(0, 6) + ‟19′ + card、substr(6, card、length – 6); for(i = 0; i<17; i ++) { cardTemp += card、substr(i, 1) * arrInt[i]; } card += arrCh[cardTemp % 11]; return card; } return card; };

From Jeskitt

From Jeskitt

原文网站(From Jeskitt) 文章标题:《JavaScript正则表达式验证身份证号码》 From Jeskitt 29th Sep,2015

From Jeskitt

以上就是差异网为大家整理的5篇《台湾身份证号码的验证规则》,希望对您有一些参考价值,更多范文样本、模板格式尽在差异网。

工装验证规 篇2

package 、lishi、idcatch;

import ;

import ;

import java、util、Calendar;

import ;

import java、util、Hashtable;

import ;

import ;

/*********************************** 身

****************************************/

/**份证验证开始

* 身份证号码验证

*

1、号码的结构

* 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,* 八位数字出生日期码,三位数字顺序码和一位数字校验码。

*

2、地址码(前六位数)

* 表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。

*

3、出生日期码(第七位至十四位)

* 表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。

*

4、顺序码(第十五位至十七位)

* 表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,* 顺序码的奇数分配给男性,偶数分配给女性。

*

5、校验码(第十八位数)

* (1)十七位数字本体码加权求和公式 S = Sum(Ai * Wi), i = 0, 。、。 , 16 ,先对前17位数字的权求和

* Ai:表示第i位置上的身份证号码数字值 Wi:表示第i位置上的加权因子 Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4

* 2 (2)计算模 Y = mod(S, 11) (3)通过模得到对应的校验码 Y: 0 1 2 3 4 5 6 7 8 9 10 校验码: 1 0

* X 9 8 7 6 5 4 3 2

* 2)现在校验最后一位 x必须是大写,其他没有区别!(X表示11)

*/

public class IdHolder {

/**

* 功能:身份证的有效验证

* @param IDStr 身份证号

* @return 有效:返回“" 无效:返回String信息* @throws ParseException*/public static String IDCardValidate(String IDStr) throws ParseException {String errorInfo = ”“;// 记录错误信息String[] ValCodeArr = { ”1“, ”0“, ”X“, ”9“, ”8“, ”7“, ”6“, ”5“, ”4“,”3“, ”2“ };String[] Wi = { ”7“, ”9“, ”10“, ”5“, ”8“, ”4“, ”2“, ”1“, ”6“, ”3“, ”7“,”9“, ”10“, ”5“, ”8“, ”4“, ”2“ };

为数字。”;

String Ai = “";// ================ 号码的长度 15位或18位 ================if (IDStr、length() != 15 && IDStr、length() != 18) {errorInfo = ”身份证号码长度应该为15位或18位。“;return errorInfo;}// =======================(end)========================// ================ 数字 除最后以为都为数字 ================if (IDStr、length() == 18) {Ai = IDStr、substring(0, 17);} else if (IDStr、length() == 15) {Ai = IDStr、substring(0, 6) + ”19“ + IDStr、substring(6, 15);}if (isNumeric(Ai) == false) {errorInfo = ”身份证15位号码都应为数字 ; 18位号码除最后一位外,都应return errorInfo;}// =======================(end)========================// ================ 出生年月是否有效 ================String strYear = Ai、substring(6, 10);// 年份String strMonth = Ai、substring(10, 12);// 月份String strDay = Ai、substring(12, 14);// 月份if (isDate(strYear + “-” + strMonth + “-” + strDay) == false) {errorInfo = “身份证生日无效。”;return errorInfo;}GregorianCalendar gc = new GregorianCalendar();SimpleDateFormat s = new SimpleDateFormat(“yyyy-MM-dd”);if (Calendar、YEAR)s、parse(strYear + “-” + strMonth + “-” + strDay)。getTime())<0) {errorInfo = “身份证生日不在有效范围。”;

return errorInfo;}if (Integer、parseInt(strMonth)>12 || Integer、parseInt(strMonth) == 0) {errorInfo = “身份证月份无效”;return errorInfo;}if (Integer、parseInt(strDay)>31 || Integer、parseInt(strDay) == 0) {errorInfo = “身份证日期无效”;return errorInfo;}// =====================(end)=====================// ================ 地区码时候有效 ================Hashtable h = GetAreaCode();if (h、get(Ai、substring(0, 2)) == null) {errorInfo = “身份证地区编码错误。”;return errorInfo;}// // ================ 判断最后一位的值 ================int TotalmulAiWi = 0;for (int i = 0; i<17; i++) {TotalmulAiWi = TotalmulAiWi+ Integer、parseInt(String、valueOf(Ai、charAt(i)))* Integer、parseInt(Wi[i]);}int modValue = TotalmulAiWi % 11;String strVerifyCode = ValCodeArr[modValue];Ai = Ai + strVerifyCode;//x必须为大写if (IDStr、length() == 18) {if (Ai、equals(IDStr) == false) {errorInfo = “身份证无效,不是合法的身份证号码”;return errorInfo;}} else {return “";}// =====================(end)=====================return ”“;}/**

* 功能:设置地区编码* @return Hashtable 对象*/private static Hashtable GetAreaCode() {Hashtable hashtable = new Hashtable();hashtable、put(”11“, ”北京“);hashtable、put(”12“, ”天津“);hashtable、put(”13“, ”河北“);hashtable、put(”14“, ”山西“);hashtable、put(”15“, ”内蒙古“);hashtable、put(”21“, ”辽宁“);hashtable、put(”22“, ”吉林“);hashtable、put(”23“, ”黑龙江“);hashtable、put(”31“, ”上海“);hashtable、put(”32“, ”江苏“);hashtable、put(”33“, ”浙江“);hashtable、put(”34“, ”安徽“);hashtable、put(”35“, ”福建“);hashtable、put(”36“, ”江西“);hashtable、put(”37“, ”山东“);hashtable、put(”41“, ”河南“);hashtable、put(”42“, ”湖北“);hashtable、put(”43“, ”湖南“);hashtable、put(”44“, ”广东“);hashtable、put(”45“, ”广西“);hashtable、put(”46“, ”海南“);hashtable、put(”50“, ”重庆“);hashtable、put(”51“, ”四川“);hashtable、put(”52“, ”贵州“);hashtable、put(”53“, ”云南“);hashtable、put(”54“, ”西藏“);hashtable、put(”61“, ”陕西“);hashtable、put(”62“, ”甘肃“);hashtable、put(”63“, ”青海“);hashtable、put(”64“, ”宁夏“);hashtable、put(”65“, ”新疆“);hashtable、put(”71“, ”台湾“);hashtable、put(”81“, ”香港“);hashtable、put(”82“, ”澳门“);hashtable、put(”91“, ”国外“);return hashtable;}/**

* 功能:判断字符串是否为数字

* @param str

* @return

*/

private static boolean isNumeric(String str) {

Pattern pattern = (”[0-9]*“);

Matcher isNum = pattern、matcher(str);

if (isNum、matches()) {

return true;

} else {

return false;

}

}

/**

* 功能:判断字符串是否为日期格式

* @param str

* @return

*/

public static boolean isDate(String strDate) {

Pattern pattern = Pattern

。pile(”^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|

(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\s(((0?[0-9])|([1-2][0-3]))\:([0-5]?[0-9])((\s)|(\:([0-5]?[0-9])))))?$“);

Matcher m = pattern、matcher(strDate);

if (m、matches()) {

return true;

} else {

return false;

}

}

/**

* 顺序码味12-15或者14-17 为 1表示男,0表示女

* @param id 身份证号

* @return

*/

public static int getSex(String id) {

String num = ”“;

if (id、length() == 15) {

num = id、substring(12, 15);

}

if (id、length() == 18) {

num = id、substring(14, 17);

}

int p = Integer、parseInt(num);

return p % 2;

}

/**

* @param args

* @throws ParseException

*/

public static void main(String[] args) throws ParseException {// String IDCardNum=”***“;// String IDCardNum=”***114“;String IDCardNum = ”***343“;//IdHolder cc = new IdHolder();

System、out、println(IdHolder、IDCardValidate(IDCardNum));// System、out、println(cc、isDate(”1996-02-29"));}

/*********************************** 身份证****************************************/

} 验证结束

如何用Excel验证身份证号码是否符合规则 篇3

EXCEL中如何提取身份证出生日期、性别、检验身份证号

码的正确性

中国居民身份证号码是一组特征组合码,原为15位,现升级为18位,其编码规则为:15位:6位数字常住户口所在县市的行政区划代码,6位数字出生日期代码,3位数字顺序码。

18位:6位数字常住户口所在县市的行政区划代码,8位数字出生日期代码,3位数字顺序码和1位检验码。

其中3位数字顺序码,是为同一地址码的同年同月同日出生人员编制的顺序号,偶数的为女性,奇数的为男性。

1、提取籍贯地区的行政区划代码(A2为身份证号,下同)

15与18位通用:=LEFT(A2,6)

如果有一个编码和省份地区的对照表,可以用VLOOKUP函数来提取地区信息。2、提取出生日期信息

15位:=--TEXT(19&MID(A2,7,6),“#-00-00”)

18位:=--TEXT(MID(A2,7,8),“#-00-00”)

15与18位通用:=--TEXT(IF(LEN(A2)=15,19,“")&MID(A2,7,6+IF(LEN(A2)=18,2,0)),”#-00-00“)

简化公式:=--TEXT((LEN(A2)=15)*19&MID(A2,7,6+(LEN(A2)=18)*2),”#-00-00“)(请将输入公式的单元格格式设置为日期格式)

3、提取性别信息

15位:=IF(MOD(RIGHT(A2),2)=1,”男“,”女“)

18位:=IF(MOD(MID(A2),17,1)=1,”男“,”女“)

15与18位通用:=IF(MOD(MID(A2,IF(LEN(A2)=15,15,17),1),2)=1,”男“,”女“)简化公式:=IF(MOD(RIGHT(LEFT(A2,17)),2),”男“,”女“)

4、检验身份证号码的正确性

18位身份证号码的最后一位是检验码,它是根据身份证前17位数字依照规则计算出来的,其值0~9或X。一般情况只要有一位数字输入错误,依照规则计算后就会与第18位数不符。当然不排除按错误号码计算后恰好与检验码相符的情况,但这种情况出现的可能性较低。因此,对18位号码的验证采用如下公式:

=MID(”10X98765432“,MOD(SUMPRODUCT(MID(A2,ROW(INDIRECT(”1:17“)),1)*2^(18-ROW(INDIRECT(”1:17“)))),11)+1,1)=RIGHT(A2,1)

对于15位身份证,由于没有检验码,我们只能简单地去判断出生日期代码是否是一个有效的日期,避免输入一些像“731302”或“980230“等这样不存在的日期。

=ISNUMBER(--TEXT(19&MID(A2,7,6),”#-00-00“))

综合15位和18位后的通用公式为:

=IF(LEN(A2)=18,MID(”10X98765432“,MOD(SUMPRODUCT(MID(A2,ROW(INDIRECT(”1:17“)),1)*2^(18-ROW(INDIRECT(”1:17“)))),11)+1,1)=RIGHT(A2),IF(LEN(A2)=15,ISNUMBER(--TEXT(19&MID(A2,7,6),”#-00-00“))))

由于目前15位身份证号码已经很少了,如果对15位的号码不需要作进一步的判断,则公式可以简化成:

=IF(LEN(A2)=18,MID(”10X98765432“,MOD(SUMPRODUCT(MID(A2,ROW(INDIRECT(”1:17“)),1)*2^(18-ROW(INDIRECT(”1:17“)))),11)+1,1)=RIGHT(A2),LEN(A2)=15)

将上面的公式放到B2单元格,如果结果为TRUE,则身份证号是正确的,结果为FALSE则是错误的。

你也可以将上述公式放在数据有效性中,防止录入错误的身份证号。操作方法:选择需要输入身份证的全部单元格区域,比如A2:A10,点菜单”数据“-”有效性“,在”允许“的下拉框中选择”自定义“,在”公式“输入上面的15位和18位通用公式,确定以后即可。注意:公式里的”A2“是你刚才选定要输入身份证的单元格★WWW、CHAYI5、COM★区域的第一个单元格,如果你是要在C3:C20输入身份证号,则将公式里的”A2“改为”C3“。另外,你也可以先设置好某单个单元格的数据有效性(这时公式的A2改为选定的单元格),再用格式刷将其格式刷到其他需要相同设置的单元格。5、15位升为18位

=IF(LEN(A2)=15,REPLACE(A2,7,,19)&MID(”10X98765432“,MOD(SUMPRODUCT(MID(REPLACE(A2,7,,19),ROW(INDIRECT(”1:17“)),1)*2^(18-ROW(INDIRECT(”1:17“)))),11)+1,1),A2)

6、18位转换为15位

=IF(LEN(A2)=18,LEFT(REPLACE(A2,7,2,),15),A2)

7、示例

表中公式:

B2 =IF(LEN(A2)=18,MID(”10X98765432“,MOD(SUMPRODUCT(MID(A2,ROW(INDIRECT(”1:17“)),1)*2^(18-ROW(INDIRECT(”1:17“)))),11)+1,1)=RIGHT(A2),IF(LEN(A2)=15,ISNUMBER(--TEXT(19&MID(A2,7,6),”#-00-00“))))

C2 =IF(A2<>”“,TEXT((LEN(A2)=15)*19&MID(A2,7,6+(LEN(A2)=18)*2),”#-00-00“)+0,)D2 =IF(A2<>”“,IF(MOD(RIGHT(LEFT(A2,17)),2),”男“,”女“),)

E2 =IF(A2<>”“,DATEDIF(TEXT((LEN(A2)=15)*19&MID(A2,7,6+(LEN(A2)=18)*2),”#-00-00“),TODAY(),”y“),)

F2 =IF(A2<>”“,VLOOKUP(LEFT(A2,2),地区表!A:D,2,),)

H2 =IF(LEN(A2)=15,REPLACE(A2,7,,19)&MID(”10X98765432“,MOD(SUMPRODUCT(MID(REPLACE(A2,7,,19),ROW(INDIRECT(”1:17“)),1)*2^(18-ROW(INDIRECT(”1:17")))),11)+1,1),A2)I2 =IF(LEN(A2)=18,LEFT(REPLACE(A2,7,2,),15),A2)

台湾身份证号码的验证规则 篇4

身分證號碼的驗證規則

一般而言大家對身份字號的認知,多是知道共有10位,位第一位為英文字母,知道再多一點的大概就是第二個數字是男女生之分,男生為 1,女生為 2,接下來的一陀數字,是不是隨便輸入都可以呢?其實是不可以的。

身份證字號後面八個數字不是隨便打一些數字就可以了,其實前面七個可以隨便打,但是最後一位為檢查碼,必須經過之前一個字母與8個數字的組合計算後得出,以下即為檢查碼的運算原則:

1、 英文代號以下表轉換成數字

2、 3、 4、 5、 6、 7、 8、 9、 10、 11、 A=10 台北市 J=18 新竹縣 S=26 高雄縣 B=11 台中市 K=19 苗栗縣 T=27 屏東縣 C=12 基隆市 L=20 台中縣 U=28 花蓮縣 D=13 台南市 M=21 南投縣 V=29 台東縣 E=14 高雄市 N=22 彰化縣 * W=32 金門縣 F=15 台北縣 * O=35 新竹市 X=30 澎湖縣 G=16 宜蘭縣 P=23 雲林縣 Y=31 陽明山 H=17 桃園縣 Q=24 嘉義縣 * Z=33 連江縣 * I=34 嘉義市 R=25 台南縣

12、 英文轉成的數字, 個位數乘9再加上十位數

13、 各數字從右到左依次乘1、2、3、4、、、、8

14、 求出(2),(3)之和 15、 求出(4)除10後之餘數,用10減該餘數,結果就是檢查碼,若餘數為0,檢查碼就是 0。

例如: 身分證號碼是 F121955337

F 1 2 1 9 5 5 3 3

1 5 x x x x x x x x x x 1 9 8 7 6 5 4 3 2 1 ───────────────────── 1+45+8+14+6+45+20+15+6+3=163 163/10=16、。、。3 (餘數) 10-3=7 (檢查碼)

以上資訊由 u881510@ 提供,在此致謝。

    【写作范文】栏目
  • 上一篇:贫困申请书(精选2篇)
  • 下一篇:入团介绍人意见(精选5篇)
  • 相关文章

    推荐文章

    本站专题