4.17. 数据检查

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

4.17.1. 身份证校验

该函数能够检查身份证号码是否正确

			
CREATE DEFINER=`neo`@`%` FUNCTION `check_id_number`(`idnumber` CHAR(18))
	RETURNS enum('true','false')
	LANGUAGE SQL
	NOT DETERMINISTIC
	NO SQL
	SQL SECURITY DEFINER
	COMMENT ''
BEGIN
DECLARE status ENUM('true','false') default 'false';
DECLARE verify CHAR(1);
DECLARE sigma INT;
DECLARE remainder INT;

IF length(idnumber) = 18 THEN
	set sigma = cast(substring(idnumber,1,1) as UNSIGNED) * 7
		+cast(substring(idnumber,2,1) as UNSIGNED) * 9
		+cast(substring(idnumber,3,1) as UNSIGNED) * 10
		+cast(substring(idnumber,4,1) as UNSIGNED) * 5
		+cast(substring(idnumber,5,1) as UNSIGNED) * 8
		+cast(substring(idnumber,6,1) as UNSIGNED) * 4
		+cast(substring(idnumber,7,1) as UNSIGNED) * 2
		+cast(substring(idnumber,8,1) as UNSIGNED) * 1
		+cast(substring(idnumber,9,1) as UNSIGNED) * 6
		+cast(substring(idnumber,10,1) as UNSIGNED) * 3
		+cast(substring(idnumber,11,1) as UNSIGNED) * 7
		+cast(substring(idnumber,12,1) as UNSIGNED) * 9
		+cast(substring(idnumber,13,1) as UNSIGNED) * 10
		+cast(substring(idnumber,14,1) as UNSIGNED) * 5
		+cast(substring(idnumber,15,1) as UNSIGNED) * 8
		+cast(substring(idnumber,16,1) as UNSIGNED) * 4
		+cast(substring(idnumber,17,1) as UNSIGNED) * 2;
	set remainder = MOD(sigma,11);
	set verify = (case remainder
		when 0 then '1' when 1 then '0' when 2 then 'X' when 3 then '9'
		when 4 then '8' when 5 then '7' when 6 then '6' when 7 then '5'
		when 8 then '4' when 9 then '3' when 10 then '2' else '/' end
	);

END IF;

IF right(idnumber,1) = verify THEN
	set status = 'true';
END IF;

RETURN status;

END
			
			

首先我们使用正确身份证号码进行测试,返回true

			
mysql> select check_id_number('330702198003090915');
+---------------------------------------+
| check_id_number('330702198003090915') |
+---------------------------------------+
| true                                  |
+---------------------------------------+
1 row in set (0.01 sec)
			
			

长度不符合18位直接返回false.

			
mysql> select check_id_number('33070219800309');
+-----------------------------------+
| check_id_number('33070219800309') |
+-----------------------------------+
| false                             |
+-----------------------------------+
1 row in set (0.00 sec)	

mysql> select check_id_number('33070219800309091457889');
+--------------------------------------------+
| check_id_number('33070219800309091457889') |
+--------------------------------------------+
| false                                      |
+--------------------------------------------+
1 row in set, 1 warning (0.00 sec)
			
			

随便改译为数,校验失败返回 false

			
mysql> select check_id_number('330702198003090914');
+---------------------------------------+
| check_id_number('330702198003090914') |
+---------------------------------------+
| false                                 |
+---------------------------------------+
1 row in set (0.00 sec)					
	





原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
存储 安全 测试技术
网络中的状态检查是什么?
【8月更文挑战第24天】
119 0
|
网络协议
利用命令简单检查网络
利用命令简单检查网络
290 0
利用命令简单检查网络
第3关:节点状态检查、数据查看和更新
第3关:节点状态检查、数据查看和更新
186 0
第3关:节点状态检查、数据查看和更新
|
数据库 C#
C#如何检查MySqlConnection是否连接成功
    检测的方法之一是使用异常捕获方式来辨别是否已打开了MySqlConnection.如下: using MySql.Data; using MySql.Data.MySqlClient; private bool isConnectedOK() ...
2536 0
datagruad 日常状态检查
datagruad 日常状态检查
227 0
|
开发者 Python
类型检查|学习笔记
快速学习 类型检查
|
小程序 Android开发
排查指南 | 当 mPaaS 小程序提示“应用更新错误(1001)”时
APP 启动 mPaaS 小程序弹出 toast 信息:"应用更新错误"。
3632 0
排查指南 | 当 mPaaS 小程序提示“应用更新错误(1001)”时
|
SQL 安全 数据库
基于令牌的服务器访问验证失败,出现基础结构错误。请检查以前的错误
一数据库服务器(SQL Server 2014)上的一个作业执行报错,具体错误信息如下:   Executed as user: NT SERVICE\SQLSERVERAGENT. 用户 'xxxx\xxxxx$' 登录失败。
1954 0
基于令牌的服务器访问验证失败,出现基础结构错误。请检查以前的错误
|
安全 网络协议
CVE-2020-8617:检查TSIG有效性的代码逻辑错误可能被用于触发tsig.c中的断言失败
2020年5月19日,ISC发布了BIND的一个新的漏洞和补丁。在受到攻击时,新版本的BIND服务器可以触发tsig.c中的断言失败,而检测到服务器不一致的状态并强制退出,进而保护服务器。