偃师做网站,软件开发流程书籍,flash工作室网站模板,ide 在线 wordpress中国居民身份证号码编码规则 第一、二位表示省#xff08;自治区、直辖市、特别行政区#xff09;。 第三、四位表示市#xff08;地级市、自治州、盟及国家直辖市所属市辖区和县的汇总码#xff09;。其中#xff0c;01-20#xff0c;51-70表示省直辖市#xff1b;21-5…中国居民身份证号码编码规则 第一、二位表示省自治区、直辖市、特别行政区。 第三、四位表示市地级市、自治州、盟及国家直辖市所属市辖区和县的汇总码。其中01-2051-70表示省直辖市21-50表示地区自治州、盟。 第五、六位表示县市辖区、县级市、旗。01-18表示市辖区或地区自治州、盟辖县级市21-80表示县旗81-99表示省直辖县级市。 第七、十四位表示出生年月日单数字月日左侧用0补齐。其中年份用四位数字表示年、月、日之间不用分隔符。例如1981年05月11日就用19810511表示。 第十五、十七位表示顺序码。对同地区、同年、月、日出生的人员编定的顺序号。其中第十七位奇数分给男性偶数分给女性。 第十八位表示校验码。作为尾号的校验码是由号码编制单位按统一的公式计算出来的校验码如果出现数字10就用X来代替详情参考下方计算方法。 其中第一代身份证号码为15位。年份两位数字表示没有校验码。前六位详情请参考省市县地区代码X是罗马字符表示数字10罗马字符1-12Ⅰ、Ⅱ、Ⅲ、Ⅳ、Ⅴ、Ⅵ、Ⅶ、Ⅷ、Ⅸ、Ⅹ、Ⅺ、Ⅻ……详情请参考罗马字符。 中国居民身份证校验码算法 步骤如下 将身份证号码前面的17位数分别乘以不同的系数。从第一位到第十七位的系数分别为7910584216379105842。将这17位数字和系数相乘的结果相加。用加出来和除以11取余数。余数只可能有012345678910这11个数字。其分别对应的最后一位身份证的号码为10X98765432。通过上面计算得知如果余数是3第18位的校验码就是9。如果余数是2那么对应的校验码就是XX实际是罗马数字10。 例如某男性的身份证号码为【53010219200508011X】 我们看看这个身份证是不是合法的身份证。首先我们得出前17位的乘积和【(5*7)(3*9)(0*10)(1*5)(0*8)(2*4)(1*2)(9*1)(2*6)(0*3)(0*7)(5*9)(0*10)(8*5)(0*8)(1*4)(1*2)】是189然后用189除以11得出的结果是189/1117----2也就是说其余数是2。最后通过对应规则就可以知道余数2对应的检验码是X。所以可以判定这是一个正确的身份证号码。 Java代码示例
public class Validator {private static final int[] WEIGHTS {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};public static boolean validate(String idCardNumber) {if (idCardNumber.length() ! 18) {return false;}int sum 0;for (int i 0; i 17; i) {char c idCardNumber.charAt(i);if (!Character.isDigit(c)) {return false;}int digit c - 0;sum digit * WEIGHTS[i];}//取余数int remainder sum % 11;//计算校验码char expectedCheckDigit getCheckDigit(remainder);char actualCheckDigit idCardNumber.charAt(17);return expectedCheckDigit actualCheckDigit;}private static char getCheckDigit(int remainder) {switch (remainder) {case 0:return 1;case 1:return 0;case 2:return X;case 3:return 9;case 4:return 8;case 5:return 7;case 6:return 6;case 7:return 5;case 8:return 4;case 9:return 3;case 10:return 2;default:throw new IllegalArgumentException(Invalid remainder: remainder);}}
}