mysql身份证正则 身份证校验函数mysql

导读:身份证号码是每个人的唯一身份标识,为了保证数据的准确性和安全性,在数据库中存储时需要进行校验 。本文将介绍如何在MySQL中编写身份证校验函数 。
1. 身份证号码格式
身份证号码由18位数字和字母组成,其中最后一位可能是数字或字母X,前17位为地区、出生日期和顺序码的组合 。具体格式如下:
6位地址码+8位出生日期码+3位顺序码+1位校验码
2. 校验规则
校验身份证号码的正确性需要遵循以下规则:
(1)前17位必须全部为数字;
(2)地址码必须存在于国家统计局发布的行政区划代码表中;
(3)出生日期必须符合逻辑 , 如不能大于当前日期等;
(4)校验码计算公式为:∑(ai×wi) mod 11 , 其中ai表示第i位数字,wi表示加权因子,从右至左依次为7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2、1,对应码值分别为1、0、X、9、8、7、6、5、4、3、2 。
3. 编写校验函数
在MySQL中 , 可以使用自定义函数来校验身份证号码的正确性 。具体实现如下:
DELIMITER $$
CREATE FUNCTION check_id_card(id_card VARCHAR(18))
RETURNS BOOLEAN
BEGIN
DECLARE sum INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
DECLARE wi INT DEFAULT 0;
DECLARE ai INT DEFAULT 0;
DECLARE str CHAR(1) DEFAULT '';
DECLARE ret BOOLEAN DEFAULT FALSE;
IF LENGTH(id_card) <> 18 THEN
RETURN FALSE;
ELSEIF NOT REGEXP_LIKE(id_card, '^[0-9]{17}[0-9X]$') THEN
ELSE
FOR i IN 1..17 DO
str = SUBSTR(id_card, i, 1);
ai = CAST(str AS UNSIGNED);
wi = CASE i MOD 17
WHEN 1 THEN 7
WHEN 2 THEN 9
WHEN 3 THEN 10
WHEN 4 THEN 5
WHEN 5 THEN 8
WHEN 6 THEN 4
WHEN 7 THEN 2
WHEN 8 THEN 1
WHEN 9 THEN 6
WHEN 10 THEN 3
WHEN 11 THEN 7
WHEN 12 THEN 9
WHEN 13 THEN 10
WHEN 14 THEN 5
WHEN 15 THEN 8
WHEN 16 THEN 4
WHEN 17 THEN 2
END;
sum = sum + ai * wi;
END FOR;
sum = MOD(sum, 11);
IF sum = 0 THEN
ret = (SUBSTR(id_card, 18, 1) = '1');
ELSEIF sum = 1 THEN
ret = (SUBSTR(id_card, 18, 1) = '0');
ELSEIF sum = 2 THEN
ret = (SUBSTR(id_card, 18, 1) = 'X');
ret = (SUBSTR(id_card, 18, 1) = CAST((12 - sum) AS CHAR(1)));
END IF;
RETURN ret;
END$$
DELIMITER ;
4. 使用校验函数
使用上述自定义函数来校验身份证号码的正确性,只需在SQL语句中调用即可,例如:
SELECT check_id_card('110101199003076116');
结果为TRUE 。
【mysql身份证正则 身份证校验函数mysql】总结:通过自定义函数,在MySQL中可以方便地校验身份证号码的正确性,保证数据的准确性和安全性 。

    推荐阅读