身份证号校验,解析等

import com.baidu.aip.ocr.AipOcr;
import org.json.JSONObject;import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.IntStream;/*** 身份证工具类*/
public class CardUtil {private static final int[] COEFFICIENT_ARRAY = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};// 身份证校验码private static final String[] IDENTITY_MANTISSA = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};// 身份证号的尾数规则private static final String IDENTITY_PATTERN = "^[0-9]{17}[0-9Xx]$";/*** 身份证号码验证* 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)通过模( 0 1 2 3 4 5 6 7 8 9 10)得到对应的校验码 Y:1 0 X 9 8 7 6 5 4 3 2*/public static boolean isLegalPattern(String identity) {if (identity == null || identity.length() != 18 || !identity.matches(IDENTITY_PATTERN)) {return false;}char[] chars = identity.toCharArray();long sum = IntStream.range(0, 17).map(index -> {char ch = chars[index];int digit = Character.digit(ch, 10);int coefficient = COEFFICIENT_ARRAY[index];return digit * coefficient;}).summaryStatistics().getSum();// 计算出的尾数索引int mantissaIndex = (int) (sum % 11);String mantissa = IDENTITY_MANTISSA[mantissaIndex];String lastChar = identity.substring(17);return lastChar.equalsIgnoreCase(mantissa);}/*** 通过身份证号码获取 生日,年龄,性别代码* @param certificateNo 身份证号码* @return Map*/public static Map<String, String> getBirthdayAgeSex(String certificateNo) {String birthday = "";String sexCode = "";char[] number = certificateNo.toCharArray();boolean flag = true;if (number.length == 15) {for (int x = 0; x < number.length; x++) {if (!flag) return new HashMap<String, String>();flag = Character.isDigit(number[x]);}} else if (number.length == 18) {for (int x = 0; x < number.length - 1; x++) {if (!flag) return new HashMap<String, String>();flag = Character.isDigit(number[x]);}}if (flag && certificateNo.length() == 15) {birthday = "19" + certificateNo.substring(6, 8) + "-"+ certificateNo.substring(8, 10) + "-"+ certificateNo.substring(10, 12);sexCode = Integer.parseInt(certificateNo.substring(certificateNo.length() - 3, certificateNo.length())) % 2 == 0 ? "F" : "M";// age = (year - Integer.parseInt("19" + certificateNo.substring(6, 8))) + "";} else if (flag && certificateNo.length() == 18) {birthday = certificateNo.substring(6, 10) + "-"+ certificateNo.substring(10, 12) + "-"+ certificateNo.substring(12, 14);sexCode = Integer.parseInt(certificateNo.substring(certificateNo.length() - 4, certificateNo.length() - 1)) % 2 == 0 ? "F" : "M";// age = (year - Integer.parseInt(certificateNo.substring(6, 10))) + "";}Map<String, String> map = new HashMap<String, String>();map.put("birthday", birthday);map.put("sexCode", sexCode);map.put("age", getPersonAgeFromIdCard(certificateNo).toString());return map;}/*** 隐藏身份证某几位* @param idCard* @return String*/public static String hideIdCard(String idCard){return idCard = idCard.replaceAll("(\\d{10})\\d{6}(\\d{2})","$1******$2");}/*** 根据身份证号码获取年龄* @param idCard 身份证号码* @return 年龄*/public static Integer getPersonAgeFromIdCard(String idCard) {//截取身份证中出行人出生日期中的年、月、日Integer personYear = Integer.parseInt(idCard.substring(6, 10));Integer personMonth = Integer.parseInt(idCard.substring(10, 12));Integer personDay = Integer.parseInt(idCard.substring(12, 14));Calendar cal = Calendar.getInstance();// 得到当前时间的年、月、日Integer yearNow = cal.get(Calendar.YEAR);Integer monthNow = cal.get(Calendar.MONTH) + 1;Integer dayNow = cal.get(Calendar.DATE);// 用当前年月日减去生日年月日Integer yearMinus = yearNow - personYear;Integer monthMinus = monthNow - personMonth;Integer dayMinus = dayNow - personDay;Integer age = yearMinus; //先大致赋值if (yearMinus == 0) { //出生年份为当前年份age = 0;} else { //出生年份大于当前年份if (monthMinus < 0) {//出生月份小于当前月份时,还没满周岁age = age - 1;}if (monthMinus == 0) {//当前月份为出生月份时,判断日期if (dayMinus < 0) {//出生日期小于当前月份时,没满周岁age = age - 1;}}}return age;}
}

百度api身份证照片识别

需要去百度智能云创建一个图像识别应用,从那获取APPID,API Key,Secret Key

导入的jar

<dependency><groupId>com.baidu.aip</groupId><artifactId>java-sdk</artifactId><version>4.15.7</version>
</dependency>

代码:

 public static void main(String[] args) {readIdCardImg("E:\\haodage.jpg");}public static void readIdCardImg(String imgPath){String APP_ID = "App ID";// App IDString API_KEY = "Api Key";// Api KeyString SECRET_KEY = "Secret";//SecretAipOcr client = new AipOcr(APP_ID,API_KEY,SECRET_KEY);//front:身份证含照片的一面;back:身份证带国徽的一面。// 自动检测身份证正反面,如果传参指定方向与图片相反,支持正常识别,// 返回参数image_status字段为"reversed_side"JSONObject res = client.idcard(imgPath,"front",null);System.out.println(res);JSONObject words_result = new JSONObject(res.get("words_result").toString());JSONObject name = new JSONObject(words_result.get("姓名").toString());System.out.println(name.get("words"));JSONObject idCard = new JSONObject(words_result.get("公民身份号码").toString());System.out.println(idCard.get("words"));}

身份证号校验、身份证照片解析(百度API)相关推荐

  1. Java身份证号校验

    面向百度编程 package com.sinosoft.lf.util.common;import java.text.SimpleDateFormat; import java.util.Date; ...

  2. C语言基础入门48篇_26_身份证号校验程序(以身份证的校验方式是实例加深对数组及函数封装的理解、字符-‘0‘得到字符对应的int类型数字)

    本篇根据以二代身份证的校验方式是实例加深对数组及函数封装的理解 1. 第二代身份证号的组成 第二代身份证号为18位,各位数字对应了不同的信息(以下顺序从左往右): AABBCCYYYYMMDDXXXV ...

  3. 用Python进行身份证号校验

    在日常应用中,经常需要输入身份证号,因为号码较长容易录错,因此需要进行实时校验,以尽可能保证输入正确.以下以Python为例,浅聊身份证号码校验的方法. 首先我们需要了解身份证号各个号段的意义.身份证 ...

  4. 最牛js身份证号校验方法

    最牛js身份证号校验方法: function IdCodeValid(code){ //身份证号合法性验证 //支持15位和18位身份证号 //支持地址编码.出生日期.校验位验证 var city={ ...

  5. 使用 python 进行身份证号校验

    使用 python 代码进行身份证号校验 先说,还有很多可以优化的地方. 1.比如加入15位身份证号的校验,嗯哼,15位的好像没有校验,那就只能提取个出生年月日啥的了. 2.比如判断加入地址数据库,增 ...

  6. 【Excel VBA】身份证号校验功能函数

    纲举目张 说明 代码code 使用方法 说明 在处理工作数据时经常会有身份证号,而身份证号作为唯一能够精确标记某个人的关键数据,所以身份证号的正确与否就非常关键,而一般身份证号都是手工录入为主,大多数 ...

  7. uniapp vue 身份证号校验

    在utils文件夹中创建一个文件   passid.js //身份证号严格校验 function identityIDCard(code) {//身份证号前两位代表区域var city = {11: ...

  8. HTML身份证号校验及根据身份证号获取出生日期/性别

    一.HTML的方法都写在js里 若HTML.JS.CSS在一个HTML文件中,在HTML中使用HTML需要借助<scirpt>标签,使用<script>标签的方式有两种: 一种 ...

  9. 身份证号校验(极简版)

    身份证号的规则如下: /*** 身份证18位数字含义:前1.2位数字表示:所在省份的代码:第3.4位数字表示:所在城市的代码: 第5.6位数字表示:所在区县的代码:* 第7~14位数字表示:生日: 第 ...

  10. 严格身份证格式校验,真实身份证号校验方法文件CheckIdCardUtil.js

    业务需求,需要用到非常严格的身份证号格式校验 这里校验方法经过测试真实身份证号码日期改一位都不行,必须完全真实号码 以下内容是项目中用到的校验方法,记录下来防止以后再用到 import check f ...

最新文章

  1. erp二次开发有出路吗_ERP的真正技术瓶颈:详细生产排程!
  2. 〔译〕TypeScript 2.0 正式发布
  3. 使用单独的解决方案(类库)来开发DNN的模块-C#版本(2)
  4. linux--几种常见的进程调度算法
  5. 菜鸟车辆路径规划创造26项世界纪录 实际可降低10.3%配送成本
  6. Wythoff's game
  7. linux上oracle登堡测评,Oracle Data Guard Linux 平台 Physical Standby 搭建实例
  8. GitHub - ErnestChen1/SmartSpeaker: 一个基于云端语音识别的智能控制设备,类似于天猫精灵,小爱同学。采用的芯片为stm32f407,wm8978,esp8266。...
  9. EBU 4202数电 LAB2 答案与解析
  10. Python菜鸟教程
  11. C语言--指针实现字符串逆序输出
  12. 基于react+antd的后台管理模板
  13. 运维工程师高阶面试总结
  14. Simplest NodeJS server
  15. 全网最使用MySQL, JSP, Bean, JDBC(连接数据库) ,制作有权限(老师,学生,辅导员) 用户登录demo,表单查看demo
  16. JavaScript摘录(二)
  17. 知识点滴 - Git名字的由来
  18. 【财富空间】马斯克:2次被踢出局后,我悟出来的6条投资哲学
  19. HTML5文件夹隐藏了怎么打开,如何打开隐藏文件夹,详细教您打开隐藏文件夹的方法...
  20. (二)Landsat_5 TM 遥感影像波段合成真假彩色影像

热门文章

  1. 电脑端微信多开小工具
  2. 使用java发送邮件(支持多人)
  3. gsonformat java代码_AndroidStudio插件GsonFormat快速实现JavaBean
  4. 七步法计算测量不确定度:第八步
  5. 03.【Axure 10 】win系统软件汉化
  6. Java实现人脸识别
  7. TakeColor取色器的使用
  8. 俄罗斯方块c语言代码 vc 6.0,VC++6.0俄罗斯方块代码
  9. iar stm32_基于最新5.4电机库的STM32电机控制应用实战分享
  10. 计算机系统管理程序,计算机系统管理操作程序