前后端进行身份证号验证
前言
实名制是许多网站都必备的功能,因此用户经常需要输入身份证号,但是我们无法连通公安局的数据库进行验证身份证和姓名地址是否匹配,因此可以根据身份证生成的规则来进行身份证格式的验证,以下仅介绍二代身份证的验证。
计算公式
const weight = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];//十七位数字本体码权重 const validate = [\'1\',\'0\',\'X\',\'9\',\'8\',\'7\',\'6\',\'5\',\'4\',\'3\',\'2\'];//mod11,对应校验码字符值 function getValidateCode(id17){ let sum = 0; let mode = 0; [...id17].forEach((elem,i) => { sum=sum+parseInt(elem)*weight[i]; }); mode = sum % 11; return validate[mode]; } console.log("该身份证验证码:"+ getValidateCode("14230219700101101"));//该身份证验证码:3
后端验证(Java)
public class Id18 { int[] weight={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//十七位数字本体码权重 char[] validate={ \'1\',\'0\',\'X\',\'9\',\'8\',\'7\',\'6\',\'5\',\'4\',\'3\',\'2\'};//mod11,对应校验码字符值 public char getValidateCode(String id17){ int sum = 0; int mode = 0; for(int i = 0; i < id17.length(); i++){ sum=sum+Integer.parseInt(String.valueOf(id17.charAt(i)))*weight[i]; } mode = sum % 11; return validate[mode]; } public static void main(String[] args){ Id18 tes t= new Id18(); System.out.println("该身份证验证码:"+test.getValidateCode("14230219700101101"));//该身份证校验码:3 } }
总结
身份证验证和手机号邮箱等格式验证是一样的,都要做前后端双重验证,前端验证不通过就不劳烦后端验证,减轻服务器的压力;
至于一代身份证的验证大家也可以查询下相关的算法,在原基础上改改即可,我感觉现在好像也没有一代身份证了,亦或者用一代身份证的人都不怎么上网,因此这里就不写了。