这里是文章模块栏目内容页
身份证校验函数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中可以方便地校验身份证号码的正确性,保证数据的准确性和安全性。