证件号码有着自己的验证规则,如果只正则验证位数和字符范围系统中很有可能会出现错误的证件号码,系统中有很大多数据可能是导入并未经过系统验证。查询出这些有问题的证件号码

此函数只适用于18位证件号码,因为我们的需求就是15位证件号码算错误的

CREATE FUNCTION `getErrorIdNumer`(idNumbe VARCHAR(20)) RETURNS bigint(1)
BEGINDECLARE result  BIGINT(1) DEFAULT 0;SET @i = 1; -- 循环变量SET @sum = 0; -- 累计变量SET @res = 0;-- 累加变量对11取模的赋值变量SET @sign = 0;-- 证件号码每位赋值变量SET @idEnd = '0';IF idNumbe is NULL THENset result = 1;ELSEIF CHAR_LENGTH(idNumbe) != 18 THENset result = 1;-- 判断时间格式是否正确ELSEIF (DATE_FORMAT(SUBSTR(idNumbe,7,8),'%Y%m%d')  is NOT NULL) = 0 THENset result = 1;-- 判断出生日期是不是超出了当前时间ELSEIF (DATE_FORMAT(SUBSTR(idNumbe,7,8),'%Y%m%d')) > DATE_FORMAT(NOW(),'%Y%m%d') THENset result = 1;ELSE-- 证件号码校验-- 校验规则各位加权值-- 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2WHILE @i <= 17 DOSET @sign = SUBSTR(idNumbe ,@i ,1);IF @i = 1 THENSET @sum = @sum + (@sign * 7);ELSEIF @i = 2 THENSET @sum = @sum + (@sign * 9);ELSEIF @i = 3 THENSET @sum = @sum + (@sign * 10);ELSEIF @i = 4 THENSET @sum = @sum + (@sign * 5);ELSEIF @i = 5 THENSET @sum = @sum + (@sign * 8);ELSEIF @i = 6 THENSET @sum = @sum + (@sign * 4);ELSEIF @i = 7 THENSET @sum = @sum + (@sign * 2);ELSEIF @i = 8 THENSET @sum = @sum + (@sign * 1);ELSEIF @i = 9 THENSET @sum = @sum + (@sign * 6);ELSEIF @i = 10 THENSET @sum = @sum + (@sign * 3);ELSEIF @i = 11 THENSET @sum = @sum + (@sign * 7);ELSEIF @i = 12 THENSET @sum = @sum + (@sign * 9);ELSEIF @i = 13 THENSET @sum = @sum + (@sign * 10);ELSEIF @i = 14 THENSET @sum = @sum + (@sign * 5);ELSEIF @i = 15 THENSET @sum = @sum + (@sign * 8);ELSEIF @i = 16 THENSET @sum = @sum + (@sign * 4);ELSESET @sum = @sum + (@sign * 2);END IF;SET @i = @i +1;END WHILE;END IF;-- 对每位加权因子乘集 % 11 用来判断 第18位校检码SET @res = @sum % 11;-- 最后一位证件号码 '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'SET @idEnd = SUBSTR(idNumbe ,-1);IF @res = 1 THENIF @idEnd != '0' THENSET result = 1;END IF;ELSEIF @res = 1 THENIF @idEnd != '0' THENset result = 1;END IF;ELSEIF @res = 2 THENIF @idEnd != 'X' OR @idEnd != 'x' THENset result = 1;END IF;ELSEIF @res = 3 THENIF @idEnd != '9' THENset result = 1;END IF;ELSEIF @res = 4 THENIF @idEnd != '8' THENset result = 1;END IF;ELSEIF @res = 5 THENIF @idEnd != '7' THENset result = 1;END IF;ELSEIF @res = 6 THENIF @idEnd != '6' THENset result = 1;END IF;ELSEIF @res = 7 THENIF @idEnd != '5' THENset result = 1;END IF;ELSEIF @res = 8 THENIF @idEnd != '4' THENset result = 1;END IF;ELSEIF @res = 9 THENIF @idEnd != '3' THENset result = 1;END IF;ELSEIF @res = 10 THENIF @idEnd != '2' THENset result = 1;END IF;END IF;RETURN  result;
END

如果需要校验15位的证件号码,可以查一下升位规则,将十五位证件号码升位成18位

函数返回值 0代表证件号码正确,1代表证件号码错误

mysql 自定义函数验证证件号码相关推荐

  1. mysql自定义函数应用_mysql functions实例:在自定义函数中应用字符串函数

    分享一段mysql自定义函数的代码,在其中用到了mysql的字符串函数length. 代码: mysql> delimiter $$ mysql> CREATE FUNCTION myFu ...

  2. 数据库系列之mysql 自定义函数function,函数和存储过程的区别

    mysql 自定义函数function,函数和存储过程的区别 https://blog.csdn.net/u010365819/article/details/80470448 https://blo ...

  3. mysql 自定义函数function,函数和存储过程的区别

    From: https://blog.csdn.net/u010365819/article/details/80470448 1.MySQL自定义函数简介 在MySQL中使用自定义函数也需要相应的要 ...

  4. mysql 自定义函数教程_MySQL自定义函数

    MySQL自定义函数 函数与存储过程类似,也是一组预先编译好的SQL语句的集合,但是存储过程可以有0个或多个返回,函数就只能有一个返回 创建函数 #语法 参数列表包含两部分 参数名和参数类型 #函数体 ...

  5. MySQL自定义函数(四十六)

    MySQL自定义函数 一.什么是MYSQL自定义函数? mysql当中的自定义函数,我们简称为UDF,它实际上是一种对MySQL扩展的途径,其用法与内置函数相同. 二.自定义函数应该具备哪些条件? 我 ...

  6. mysql 自定义函数教程_Mysql 自定义函数

    Mysql 自定义函数怎么用 CREATE FUNCTION `strip_tags`($str text) RETURNS text BEGIN DECLARE $start, $end INT D ...

  7. MySQL自定义函数创建与使用总结

    MySQL自定义函数创建与使用总结 MySQL自定义函数和存储过程类似,也需要在数据库中创建并保存.它与存储过程一样,都是由SQL语句和控制语句组成的代码片段,可以被应用程序和其他SQL语句调用. M ...

  8. mysql自定义函数示例代码,以及属性介绍

    以下是一个MySQL自定义函数的示例代码,该函数实现了将指定字符串中的大写字母转换为小写字母的功能: DELIMITER $$ CREATE FUNCTION to_lower(str VARCHAR ...

  9. MySQL自定义函数的使用及MySQL中的流程控制语句

    MySQL自定义函数 文章目录 MySQL自定义函数 创建自定义函数 自定义函数的调用 自定义函数的删除 自定义函数的维护 流程控制语句 条件控制语句 循环语句 创建自定义函数 创建自定义函数时, 开 ...

最新文章

  1. mysql 技术交流群_二进制部署MySQL(运维技术交流群:926402931,欢迎大家一起来交流。)...
  2. 关系式调用c语言脚本_认识LoadRunner脚本语言
  3. LRU和LFU的区别
  4. 使用mp4v2将aac音频h264视频数据封装成mp4开发心得
  5. 占用较多堆外内存的区域
  6. ajax前端实时获取数据
  7. 构建新模式java_Nacos 1.3.0 来了,基于全新内核构建!
  8. 【matlab】:matlab中不断的出现计算过程怎么办
  9. HTML5与flash播放器
  10. 教你如何用python把玩守望先锋新英雄
  11. 火车进出栈【卡特兰数】【高精度】【压位】【压int位】
  12. 无人机运动规划4:ego-swarm无人机群运动规划
  13. python练手项目pdf_一个不错的练手项目!
  14. @Deprecated注解
  15. 《C Primer Plus第六版》第六章复习题目和编程练习题的答案
  16. 裸金属服务器能降级虚拟机不,裸金属服务器属于虚拟机吗
  17. 20款免费的WordPress企业站主题下载
  18. 计算机视觉算法——语义分割网络总结
  19. RPG的地牢猎手(优先队列广搜)
  20. c语言 字符串字符反向储存_反向字符串的PL / SQL程序

热门文章

  1. java 最长不重复子串,最长无重复字符子串
  2. 推荐一个基于SpringBoot的在线课程管理系统开源项目,超级棒!
  3. org.apache.poi往word模板中填充数据(word2003)
  4. 基于内容推荐python_用 Python 实现一个简单的基于内容的推荐引擎
  5. 常规LED显示屏out!柔性LED显示屏为什么如此受欢迎?
  6. Learning to Rank using Gradient Descent
  7. 记录一个分页不展示上一页下一页的问题
  8. z77主板支持服务器内存条吗,映泰TZ77XE3支持的内存频率是多少
  9. python适合几年级开始学英语_中国小学几年级开始学习英语
  10. 1678. 设计 Goal 解析器