array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 Java 身份证号验证 - 爱码网
  1 package utils;
  2 
  3 import java.util.HashMap;
  4 
  5 /**
  6  * Created by liqun.chen on 2017/3/15.
  7  */
  8 public class IdCardVerifyUtil {
  9 
 10     private String _codeError;
 11 
 12     //wi =2(n-1)(mod 11)
 13     final int[] wi = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1};
 14     // verify digit
 15     final int[] vi = {1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2};
 16     private int[] ai = new int[18];
 17     private static String[] _areaCode = {"11", "12", "13", "14", "15", "21", "22"
 18             , "23", "31", "32", "33", "34", "35", "36", "37", "41", "42", "43", "44"
 19             , "45", "46", "50", "51", "52", "53", "54", "61", "62", "63", "64", "65", "71", "81", "82", "91"};
 20     private static HashMap<String, Integer> dateMap;
 21     private static HashMap<String, String> areaCodeMap;
 22 
 23     static {
 24         dateMap = new HashMap<String, Integer>();
 25         dateMap.put("01", 31);
 26         dateMap.put("02", null);
 27         dateMap.put("03", 31);
 28         dateMap.put("04", 30);
 29         dateMap.put("05", 31);
 30         dateMap.put("06", 30);
 31         dateMap.put("07", 31);
 32         dateMap.put("08", 31);
 33         dateMap.put("09", 30);
 34         dateMap.put("10", 31);
 35         dateMap.put("11", 30);
 36         dateMap.put("12", 31);
 37         areaCodeMap = new HashMap<String, String>();
 38         for (String code : _areaCode) {
 39             areaCodeMap.put(code, null);
 40         }
 41     }
 42 
 43     //验证身份证位数,15位和18位身份证
 44     public boolean verifyLength(String code) {
 45         int length = code.length();
 46         if (length == 15 || length == 18) {
 47             return true;
 48         } else {
 49             _codeError = "错误:输入的身份证号不是15位和18位的";
 50             return false;
 51         }
 52     }
 53 
 54     //判断地区码
 55     public boolean verifyAreaCode(String code) {
 56         String areaCode = code.substring(0, 2);
 57 //            Element child=  _areaCodeElement.getChild("_"+areaCode);
 58         if (areaCodeMap.containsKey(areaCode)) {
 59             return true;
 60         } else {
 61             _codeError = "错误:输入的身份证号的地区码(1-2位)[" + areaCode + "]不符合中国行政区划分代码规定(GB/T2260-1999)";
 62             return false;
 63         }
 64     }
 65 
 66     //判断月份和日期
 67     public boolean verifyBirthdayCode(String code) {
 68         //验证月份
 69         String month = code.substring(10, 12);
 70         boolean isEighteenCode = (18 == code.length());
 71         if (!dateMap.containsKey(month)) {
 72             _codeError = "错误:输入的身份证号" + (isEighteenCode ? "(11-12位)" : "(9-10位)") + "不存在[" + month + "]月份,不符合要求(GB/T7408)";
 73             return false;
 74         }
 75         //验证日期
 76         String dayCode = code.substring(12, 14);
 77         Integer day = dateMap.get(month);
 78         String yearCode = code.substring(6, 10);
 79         Integer year = Integer.valueOf(yearCode);
 80 
 81         //非2月的情况
 82         if (day != null) {
 83             if (Integer.valueOf(dayCode) > day || Integer.valueOf(dayCode) < 1) {
 84                 _codeError = "错误:输入的身份证号" + (isEighteenCode ? "(13-14位)" : "(11-13位)") + "[" + dayCode + "]号不符合小月1-30天大月1-31天的规定(GB/T7408)";
 85                 return false;
 86             }
 87         }
 88         //2月的情况
 89         else {
 90             //闰月的情况
 91             if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
 92                 if (Integer.valueOf(dayCode) > 29 || Integer.valueOf(dayCode) < 1) {
 93                     _codeError = "错误:输入的身份证号" + (isEighteenCode ? "(13-14位)" : "(11-13位)") + "[" + dayCode + "]号在" + year + "闰年的情况下未符合1-29号的规定(GB/T7408)";
 94                     return false;
 95                 }
 96             }
 97             //非闰月的情况
 98             else {
 99                 if (Integer.valueOf(dayCode) > 28 || Integer.valueOf(dayCode) < 1) {
100                     _codeError = "错误:输入的身份证号" + (isEighteenCode ? "(13-14位)" : "(11-13位)") + "[" + dayCode + "]号在" + year + "平年的情况下未符合1-28号的规定(GB/T7408)";
101                     return false;
102                 }
103             }
104         }
105         return true;
106     }
107 
108     //验证身份除了最后位其他的是否包含字母
109     public boolean containsAllNumber(String code) {
110         String str = "";
111         if (code.length() == 15) {
112             str = code.substring(0, 15);
113         } else if (code.length() == 18) {
114             str = code.substring(0, 17);
115         }
116         char[] ch = str.toCharArray();
117         for (int i = 0; i < ch.length; i++) {
118             if (!(ch[i] >= '0' && ch[i] <= '9')) {
119                 _codeError = "错误:输入的身份证号第" + (i + 1) + "位包含字母";
120                 return false;
121             }
122         }
123         return true;
124     }
125     public String getCodeError() {
126         return _codeError;
127     }
128     //验证18位校验码,校验码采用ISO 7064:1983,MOD 11-2 校验码系统
129     public boolean verifyMOD(String code) {
130         String verify = code.substring(17, 18);
131         if ("x".equals(verify)) {
132             code = code.replaceAll("x", "X");
133             verify = "X";
134         }
135         String verifyIndex = getVerify(code);
136         if (verify.equals(verifyIndex)) {
137             return true;
138         }
139 //            int x=17;
140 //            if(code.length()==15){
141 //                  x=14;
142 //            }
143         _codeError = "错误:输入的身份证号最末尾的数字验证码错误";
144         return false;
145     }
146 
147     //获得校验位
148     public String getVerify(String eightcardid) {
149         int remaining = 0;
150 
151         if (eightcardid.length() == 18) {
152             eightcardid = eightcardid.substring(0, 17);
153         }
154         if (eightcardid.length() == 17) {
155             int sum = 0;
156             for (int i = 0; i < 17; i++) {
157                 String k = eightcardid.substring(i, i + 1);
158                 ai[i] = Integer.parseInt(k);
159             }
160             for (int i = 0; i < 17; i++) {
161                 sum = sum + wi[i] * ai[i];
162             }
163             remaining = sum % 11;
164         }
165         return remaining == 2 ? "X" : String.valueOf(vi[remaining]);
166     }
167     //15位转18位身份证
168     public String uptoeighteen(String fifteencardid) {
169         String eightcardid = fifteencardid.substring(0, 6);
170         eightcardid = eightcardid + "19";
171         eightcardid = eightcardid + fifteencardid.substring(6, 15);
172         eightcardid = eightcardid + getVerify(eightcardid);
173         return eightcardid;
174     }
175     
176     //验证身份证
177     public boolean verify(String idcard) {
178         _codeError = "";
179         //验证身份证位数,15位和18位身份证
180         if (!verifyLength(idcard)) {
181             return false;
182         }
183         //验证身份除了最后位其他的是否包含字母
184         if (!containsAllNumber(idcard)) {
185             return false;
186         }
187         //如果是15位的就转成18位的身份证
188         String eifhteencard = "";
189         if (idcard.length() == 15) {
190             eifhteencard = uptoeighteen(idcard);
191         } else {
192             eifhteencard = idcard;
193         }
194         //验证身份证的地区码
195         if (!verifyAreaCode(eifhteencard)) {
196             return false;
197         }
198         //判断月份和日期
199         if (!verifyBirthdayCode(eifhteencard)) {
200             return false;
201         }
202         //验证18位校验码,校验码采用ISO 7064:1983,MOD 11-2 校验码系统
203         if (!verifyMOD(eifhteencard)) {
204             return false;
205         }
206         return true;
207     }
208 }

 

相关文章: