js版或OC、Java版的都容易找到,Dart版的比较少,mark一下吧。

// 校验身份证合法性
bool verifyCardId(String cardId) {const Map city = {11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江 ", 31: "上海", 32: "江苏", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山东", 41: "河南", 42: "湖北 ", 43: "湖南", 44: "广东", 45: "广西", 46: "海南", 50: "重庆", 51: "四川", 52: "贵州", 53: "云南", 54: "西藏 ", 61: "陕西", 62: "甘肃", 63: "青海", 64: "宁夏", 65: "新疆", 71: "台湾", 81: "香港", 82: "澳门", 91: "国外 "};String tip = '';bool pass = true;RegExp cardReg = RegExp(r'^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$');if(cardId == null || cardId.isEmpty || !cardReg.hasMatch(cardId)) {tip = '身份证号格式错误';print(tip);pass = false;return pass;}if(city[int.parse(cardId.substring(0,2))] == null) {tip = '地址编码错误';print(tip);pass = false;return pass;}// 18位身份证需要验证最后一位校验位,15位不检测了,现在也没15位的了if (cardId.length == 18) {List numList = cardId.split('');//∑(ai×Wi)(mod 11)//加权因子List factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];//校验位List parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];int sum = 0;int ai = 0;int wi = 0;for (var i = 0; i < 17; i++) {ai = int.parse(numList[i]);wi = factor[i];sum += ai * wi;}var last = parity[sum % 11];if (parity[sum % 11].toString() != numList[17]) {tip = "校验位错误";print(tip);pass = false;}}else {tip = '身份证号不是18位';print(tip);pass = false;}
//  print('证件格式$pass');return pass;
}// 根据身份证号获取年龄
int getAgeFromCardId(String cardId) {bool isRight = verifyCardId(cardId);if(!isRight) {return 0;}int len = (cardId + "").length;String strBirthday = "";if (len == 18) {  //处理18位的身份证号码从号码中得到生日和性别代码strBirthday = cardId.substring(6, 10) + "-" + cardId.substring(10, 12) + "-" + cardId.substring(12, 14);}if (len == 15) {strBirthday = "19" + cardId.substring(6, 8) + "-" + cardId.substring(8, 10) + "-" + cardId.substring(10, 12);}int age = getAgeFromBirthday(strBirthday);return age;
}// 根据出生日期获取年龄
int getAgeFromBirthday(String strBirthday) {if(strBirthday == null || strBirthday.isEmpty) {print('生日错误');return 0;}DateTime birth = DateTime.parse(strBirthday);DateTime now = DateTime.now();int age = now.year - birth.year;//再考虑月、天的因素if (now.month < birth.month || (now.month == birth.month && now.day < birth.day)) {age --;}return age;
}// 根据身份证获取性别
String getSexFromCardId(String cardId) {String sex = "";bool isRight = verifyCardId(cardId);if (!isRight) {return sex;}if (cardId.length == 18) {if (int.parse(cardId.substring(16, 17)) % 2 == 1) {sex = "男";} else {sex = "女";}}if (cardId.length == 15) {if (int.parse(cardId.substring(14, 15)) % 2 == 1) {sex = "男";} else {sex = "女";}}return sex;
}

【Flutter】Dart 校验身份证号合法性,根据身份证号获取年龄性别相关推荐

  1. 【通用方法】身份证号校验、获取年龄性别生日(兼容一代二代身份证)

    二代身份证正则表达式 /^(([1][1-5])|([2][1-3])|([3][1-7])|([4][1-6])|([5][0-4])|([6][1-5])|([7][1])|([8][1-2])) ...

  2. python判断身份证是否合法的函数_Python开发之身份证验证库id_validator验证身份证号合法性及根据身...

    上个星期,大佬分享了一个验证身份证号合法性的库:id_validator,没空去试着用一下看看,今天有点时间,来试着用下这个库. 1.首先,要安装这个库,windows+R键运行cmd,打开命令行窗口 ...

  3. 身份证校验(//身份证号合法性验证 //支持15位和18位身份证号//支持地址编码、出生日期、校验位验证)

    window.checkIdNumber=(function () {var vcity = {11: "北京", 12: "天津", 13: "河北 ...

  4. Java身份证号脱敏、校验身份证号合法性、根据身份证号获取年龄、根据生日获取年龄

    这里写目录 身份证号编码规则 身份证号脱敏 身份证号合法性校验 根据身份证号获取年龄 根据生日日期获取年龄 根据身份证号获取年龄.生日的Map集合 身份证号编码规则 第一.二位表示省(自治区.直辖市. ...

  5. python之验证身份证号合法性的库:id_validator

    上个星期,大佬分享了一个验证身份证号合法性的库:id_validator,没空去试着用一下看看,今天有点时间,来试着用下这个库. 1.首先,要安装这个库,windows+R键运行cmd,打开命令行窗口 ...

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

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

  7. java校验身份证的合法性、根据身份证获取生日等工具类

    文章目录 一.校验15位或者18位身份证的合法性 二.从身份证号中反向获取生日.性别等信息 一.校验15位或者18位身份证的合法性 import java.text.ParseException; i ...

  8. hive自定义函数-身份证号合法性判断

    hive自定义函数-身份证号合法性判断 简要 代码 简要 身份证号合法性判断: 若为18位身份证号: 1.第18位数字,应该在身份证号最后一位校验位数字中 2.前17为数字分别乘以对应的加权因子,累加 ...

  9. java校验身份证的合法性

    一.判断身份证合法性的规则 1.首先先科普一下身份证号码的数字代表什么? 根据[中华人民共和国国家标准GB11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和 ...

最新文章

  1. 2022-2028年中国柴油行业市场研究及前瞻分析报告
  2. Spring发布新成员:Spring GraphQL!高调出场的GraphQL能火起来了吗?
  3. golang rpc的两种调用方法
  4. java线程池有哪几种,真香系列
  5. python连接oracle数据库的方法_Python3.6连接Oracle数据库的方法详解
  6. 组会PPT20201030《复现chen结果及初始密度影响》
  7. 贪心算法(leetcode分类解题,C++代码详细注释)
  8. 【OS学习笔记】十二 现代处理器的结构和特点
  9. ARP-地址解析协议(在实践中深入理解ARP协议)
  10. Windows Mobile 开发系列文章收藏 - Windows Mobile 6.x
  11. python槽怎么用_【Python成长之路】从零学GUI -- 多窗口跳转(信号与槽函数用法)...
  12. Android自定义view之ViewPager指示器——2
  13. ios基础篇(十二)——UINavgationController的使用(三)ToolBar
  14. Centos7 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon run
  15. Photoshop cc2015基础课笔记
  16. Linux下通用打印系统CUPS使用教程
  17. android re浏览器下载,re浏览器官方版下载_re浏览器app下载4.9.6 - 系统城
  18. 计算机专业英语词汇缩写CIA,CIA英文词汇缩写
  19. ubuntu1804安装python3.8+odoo14
  20. Java自由虾旅行平台菜单功能

热门文章

  1. Mysql数据迁移——8.0版本至5.7版本
  2. 求最大公约数欧几里得算法原理证明
  3. 鸡生蛋,蛋生鸡问题。JS顶级对象Function,Object关系
  4. Core iWin 2019
  5. 美女当道 12星座最适宜的整容术
  6. {} == {}和{} === {}都是fasle
  7. 【C++笔记:例题】
  8. 法律专业难还是计算机专业难,法学计算机英语专业饭碗最难找
  9. python语言运行效率高_如何评价说PYTHON是最快的语言?
  10. Python编写薅羊毛脚本经验分享