请教下在mysql中判断身份证号是否符合规范,并输出不符合规范的行,应该怎么写?如同在EXCEL中的判断公式:
类似这个效果,请指导
请教下在mysql中判断身份证号是否符合规范,并输出不符合规范的行,应该怎么写?如同在EXCEL中的判断公式:
类似这个效果,请指导
-- 建表
CREATE TABLE `test_id` ( `id` VARCHAR ( 18 ) NOT NULL, PRIMARY KEY ( `id` ) );
-- 初始化数据
INSERT INTO `test_id` VALUES ( '123456789123456789' ),( '432831196411150810' );
-- 检查是否通过
SELECT
id,
check_sum,
IF
( MID( id, 18, 1 )= check_sum, '通过', '不通过' ) result
FROM
(
SELECT
id,
CASE
mod_sum
WHEN 0 THEN
'1'
WHEN 1 THEN
'0'
WHEN 2 THEN
'X' ELSE 12-mod_sum
END check_sum
FROM
(
SELECT
id,
MOD (
MID( id, 1, 1 )* 7 + MID( id, 2, 1 )* 9 + MID( id, 3, 1 )* 10 + MID( id, 4, 1 )* 5 + MID( id, 5, 1 )* 8 + MID( id, 6, 1 )* 4 + MID( id, 7, 1 )* 2 + MID( id, 8, 1 )* 1 + MID( id, 9, 1 )* 6 + MID( id, 10, 1 )* 3 + MID( id, 11, 1 )* 7 + MID( id, 12, 1 )* 9 + MID( id, 13, 1 )* 10 + MID( id, 14, 1 )* 5 + MID( id, 15, 1 )* 8 + MID( id, 16, 1 )* 4 + MID( id, 17, 1 )* 2,
11
) AS mod_sum
FROM
test_id
) temp
) t;