标签:pre 执行 eof == 组合 esc 排列 i++ math
在测试过程中难免会遇到需要身份证号码的情况,记录下随机生成身份证号码与如何检验身份证号码的方法。
首先要了解身份证号码的组成方式:
18位身份证就是如上构成,15位身份证缺少的年份两位数和最后一位校验码。
要生成身份证号码首先得确定 地址码和出生日期码也可以按照规定随机抽取,顺序码自己使用函数随机生成一个2位数的码值。校验码通过计算得到。
比如现有山西 阳泉市 市辖区的地址码140301 ,出生日期码19920101和随机生成的888顺序码。其校验码的生成代码如下
/** * @Title generateId * @Descript :计算身份证的校验位并返回完整的18位身份证 * @param:前17位码值 * @return 前17位码值+校验位 * @throws * @version V1.0 */ public String generateId(String param) { char[] chars=param.toCharArray(); int result=0; for(int i=0;i<chars.length;i++){ result+=Integer.parseInt(String.valueOf(chars[i]),10)*(Math.pow(2,chars.length-i)%11); } result=result%11; result=result==0?1:result==1?0:12-result; return result==10?param+"X":param+result; }
其中校验码的计算规则如下:假设身份证号码前17位是一个17个长度的数组a[17],i表示第i位,从0开始计数直到16。那么
a[i]乘以(2的i 次方除以11的余数)在累加计算出来的值result,最后校验位就是12-累加的值除以11的余数。需要注意的是如果校验位计算出来是12那么就要替换成1,如果是11就要替换成0,如果是10就替换成X。
标签:pre 执行 eof == 组合 esc 排列 i++ math
原文地址:http://www.cnblogs.com/many-object/p/7404526.html