身份证号归属地数据库
信息来源:
https://blog.raymondwu.net/2018/05/11/%E8%BA%AB%E4%BB%BD%E8%AF%81%E5%8F%B7%E5%BD%92%E5%B1%9E%E5%9C%B0%E6%95%B0%E6%8D%AE%E5%BA%93/
drop function if EXISTS f_base_check_id_number ;create function `f_base_check_id_number`(number varchar(18)charset utf8) returns int /* -- 作者:黄海 -- 时间:2018-08-21 -- 原理:第一代身份证十五位数升为第二代身份证十八位数的一般规则是:第一步,在原十五位数身份证的第六位数后面插入19 ,这样身份证号码即为十七位数;第二步,按照国家规定的统一公式计算出第十八位数,作为校验码放在第二代身份证的尾号。 -- 校验码计算方法:将身份证前十七位数分别乘以不同系数,从第一至十七位的系数分别为7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2,将这十七位数字和系数相乘的结果相加,用加出来的和除以11,看看余数是多少。余数只可能有0、1、2、3、4、5、6、7、8、9、10这十一个数字,其分别对应的最后一位身份证的号码为1、0、X、9、8、7、6、5、4、3、2,这样就得出了第二代身份证第十八位数的校验码。-- 测试用例 select f_base_check_id_number('511423198808200077'); */BEGIN -- 区域码检查结果 declare v_area_result int; -- 出生日期年 declare v_year int; -- 出生日期月 declare v_month int; -- 出生日期日 declare v_date int; -- 判断闰月 declare v_checkdate datetime; -- 前17位 declare v_17 varchar(17); -- 临时变量 declare v_temp int;-- 前17位的系数 declare v_17_xishu varchar(256); -- 前17位乘以系数后的和 declare v_sum_17 int;DECLARE v_i INT ; declare v_current_xishu int; declare v_current_number int; declare v_yushu int; declare v_jiaoyanma VARCHAR(256); declare v_last_jiaoyanma varchar(1); set v_sum_17=0; -- 系数 set v_17_xishu='7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2'; -- 校验码 set v_jiaoyanma='1,0,X,9,8,7,6,5,4,3,2'; set v_i=1;-- 1、判断是不是15位或者18位 IF LENGTH(number)<>18 and LENGTH(number)<>15 then -- -1 代表身份证号长度不是15位,也不是18位return -1; end if;-- 2、前6位判断 select count(*) into v_area_result from t_dm_region where `code`=substring(number,1,6); if v_area_result<>1 then -- -2 代表地区码错误return -2; end if;-- 3、如果是18位判断是不是都是数字,如果不都是数字,那前17位是不是数字。 IF LENGTH(number)=18 then SELECT substring(number,1,17) into v_17; end if ;IF LENGTH(number)=15 then SELECT CONCAT(substring(number,1,6),'19',substring(number,7,15)) into v_17; end if ;-- 判断前面N-1位是不是数字 select v_17 REGEXP '[^0-9.]' into v_temp;if v_temp=1 then return -3;end if;-- 4、判断出生年月日 select substring(number,7,4) into v_year; select substring(number,11,2) into v_month; select substring(number,13,2) into v_date;if not (v_year>=1900 and v_year<=DATE_FORMAT(NOW(), '%Y')) then -- -4代表是出生年份错误 return -4; end if;if not (v_month>=1 and v_month<=12) then -- -5代表是出生月份错误 return -5; end if;if not (v_date>=1 and v_date<=31) then -- -6代表是出生日期错误 return -6; end if;-- 判断是不是闰年的日期 SELECT DATE_FORMAT(substring(number,7,8), '%Y-%m-%d') into v_checkdate; if ifnull(v_checkdate,-7)=-7 then return -7; end if;-- 5、判断是不是符合校验码规则-- 对于前17位,都要遍历一次计算出乘以系数的和while v_i<=17 do select CAST(substring(number,v_i,1) as signed) into v_current_number; SELECT CAST(substring_index(substring_index(v_17_xishu,',', v_i), ',',-1) as signed) into v_current_xishu; set v_sum_17=v_sum_17+v_current_number*v_current_xishu; set v_i=v_i+1;end while;-- 余数set v_yushu=v_sum_17 mod 11;SELECT UPPER(substring_index(substring_index(v_jiaoyanma,',', v_yushu+1), ',',-1)) into v_last_jiaoyanma;-- 如果是18位,那么最后一位的检验码是不是正确? IF LENGTH(number)=18 then if upper(substring(number,18,1))=v_last_jiaoyanma then return 1;elsereturn -8;end if; end if ;return 1; END
身份证号归属地数据库相关推荐
- .net函数查询_Java百宝箱——实现ip地址、手机号、身份证号归属地查询
文章目录 1.功能界面 2.ip地址查询 3.身份证归属地查询 4.更多功能(简繁体转换.天气查询) 网上冲浪是我们每个人每天必做的运动 ,那么在冲浪时,每个人都会携带一个ip地址.电影中的黑客往往能 ...
- Java百宝箱——实现ip地址、手机号、身份证号归属地查询
文章目录 1.功能界面 2.ip地址查询 3.身份证归属地查询 4.更多查询 1.功能界面 package com.company;import com.alibaba.fastjson.JSONOb ...
- 数据库身份证号用什么类型_互联网企业数据库安全的现状与对策
随着移动5G信息的到来,人们的生活越来越离不开网络,用户的在线行为被不断观察和记录,由此形成了海量个人数据,云计算和大数据技术也同时在飞速发展,数据化,智能化贯穿了社会生活的方方面面,互联网服务和应用 ...
- 数据库身份证号用什么类型_【文末送书】MySQL数据库?看这一篇干货文章就够了!...
前言 为啥学习MySQL呢?因为MySQL是最流行的关系型数据库管理系统之一,在web应用方面,MySQL是最好的软件.MySQL所使用的sql语言是用于访问数据库的最常用标准化语言. 放心,读这期内 ...
- 数据库身份证号加密密码加密_使用基于密码的加密保护会议室数据库
数据库身份证号加密密码加密 As developers we are often tasked with securing the data we store in our applications. ...
- 身份证号查询归属地的实际应用场景
身份证号查询归属地是一种常见的信息安全服务.它以号段为基础,可以根据输入的身份证号来查询出归属地信息.该功能目前在很多领域中应用,在客汇宝APP上就可以利用身份证号码查询到归属地. 下面我们就来介绍下 ...
- 数据库身份证号加密密码加密_使用密码加密数据
数据库身份证号加密密码加密 介绍 (Introduction) When we're encrypting data, typically we will create a random key th ...
- Python 实现验证身份证号真假以及查询归属地、出生年月等信息
python判断真假身份证号 识别一串身份证是否是真实的身份证号码: 公民身份号码是特征组合码,共18位,由17位数字本体码和1位数字校验码组成. 排列顺序从左至右依次为: 6位数字地址码,8位数字出 ...
- SQL Server数据库通过身份证号获取年龄段分布
使用sql语句获取表中存储数据的年龄分布 该表存储数据为基本信息,包含身份证号,但没有存储年龄的字段(考虑到年龄在变化) 该SQL为了获取用户的年龄分布 SELECT SUM(CASE WHEN ag ...
- 数据库SQL函数 根据身份证号/出生年月 精确计算年龄(Oracle/MySQL)
<问题> 根据身份证号统计年龄(18位) Oracle <思路> (1)Substr()函数在Oracle使用中表示被劫取的字符串表达式,截取字符串的内容. (2)To_dat ...
最新文章
- 05 Java程序员面试宝典视频课程之Jquery
- 基于java的InputStream.read(byte[] b,int off,int len)算法学习!
- Ubuntu x64安装Android studio 全部步骤和问题解决
- thinkphp的分页类
- qt creator 设置按键颜色_Qt编写自定义控件30-颜色多态按钮
- layUI table 按条件搜索 结果整个页面刷新
- 怎么多快好省地学习中文自然语言处理
- 教之初考试系统登录选择服务器,教之初考试系统使用图解
- MATLAB 多元多项式的除法
- C专家编程第二章,c语言特性的不足
- AMD HD7850 4G显卡刷Bios验真伪
- 向日葵无法远程控制打开文件软件界面显示
- windows 系统arp命令
- 图书速读 | 一分钟读完《斯坦福高效睡眠法》
- Beta周王者荣耀交流协会第六次会议
- 用声卡实现的存储示波器
- python pip 安装包失败问题,下载缓慢问题
- 关于PKI 你了解多少
- python粘性拓展_拓展Python Markdown
- MySQL EXPLAIN ANALYZE
热门文章
- Python实现页面置换算法
- GUI界面设计1 三角函数
- 网络调试助手连接mysql_网络调试助手模拟MQTT协议连接百度物联网并操作时序数据库...
- UE4_屏幕位置与世界位置的相互转化
- java 调用宏_通过java代码实现调用excel当中的宏的操作。
- 品质qc工程图_QC工程图_(品管).xls
- C语言运算符和表达式题目练习
- C#进行注册表项和键值操作
- AI之DS:人工智能领域之数据科学领域六大实践场景(金融信用违约、反欺诈模型、客户偏好洞察、智能推荐、精准营销、客户流失管理)所对应的机器学习算法总结(持续更新)
- 深入理解SSIM(两图像结构相似度指标)(附matlab代码)