钟二网络头像

钟二网络

探索SQL查询技巧、Linux系统运维以及Web开发前沿技术,提供一站式的学习体验

  • 文章92531
  • 阅读966681
首页 SQL 正文内容

sql判断身份证是否正确

钟逸 SQL 2024-03-18 15:41:01 44

身份证作为中国公民的身份证明,其正确性至关重要。在数据处理中,经常需要对身份证进行验证。SQL 作为一种强大的数据库语言,提供了多种 来判断身份证是否正确。

计算身份证校验码

身份证校验码是身份证号码的后一位数字,由前 17 位数字计算得出。其算法如下:

sql

校验码 = (∑(i=1,17)Wi * xi) % 11

其中:

- xi 为第 i 位数字

- Wi 为第 i 位数字的权重,分别为 7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2

例如,身份证号码 130631198402173047,其校验码计算如下:

sql

校验码 = (7 * 1 + 9 * 3 + 10 * 0 + 5 * 6 + 8 * 3 + 4 * 1 + 2 * 1 + 1 * 9 + 6 * 8 + 3 * 4 + 7 * 0 + 9 * 2 + 10 * 1 + 5 * 7 + 8 * 3 + 4 * 0 + 2 * 4 + 1 * 7) % 11

= 30 % 11

= 7

验证身份证正确性

使用 SQL 验证身份证正确性,需要进行以下步骤:

sql

-- 计算身份证校验码

ALTER TABLE person ADD COLUMN check_digit AS (

CAST(

SUBSTRING(person_id, 1, 17) AS INTEGER

) * 7 +

CAST(

SUBSTRING(person_id, 2, 17) AS INTEGER

) * 9 +

CAST(

SUBSTRING(person_id, 3, 17) AS INTEGER

) * 10 +

CAST(

SUBSTRING(person_id, 4, 17) AS INTEGER

) * 5 +

CAST(

SUBSTRING(person_id, 5, 17) AS INTEGER

) * 8 +

CAST(

SUBSTRING(person_id, 6, 17) AS INTEGER

) * 4 +

CAST(

SUBSTRING(person_id, 7, 17) AS INTEGER

) * 2 +

CAST(

SUBSTRING(person_id, 8, 17) AS INTEGER

) * 1 +

CAST(

SUBSTRING(person_id, 9, 17) AS INTEGER

) * 6 +

CAST(

SUBSTRING(person_id, 10, 17) AS INTEGER

) * 3 +

CAST(

SUBSTRING(person_id, 11, 17) AS INTEGER

) * 7 +

CAST(

SUBSTRING(person_id, 12, 17) AS INTEGER

) * 9 +

CAST(

SUBSTRING(person_id, 13, 17) AS INTEGER

) * 10 +

CAST(

SUBSTRING(person_id, 14, 17) AS INTEGER

) * 5 +

CAST(

SUBSTRING(person_id, 15, 17) AS INTEGER

) * 8 +

CAST(

SUBSTRING(person_id, 16, 17) AS INTEGER

) * 4 +

CAST(

SUBSTRING(person_id, 17, 17) AS INTEGER

) * 2

) % 11;

-- 验证身份证正确性

SELECT

person_id,

CASE

WHEN check_digit = CAST(SUBSTRING(person_id, 18, 1) AS INTEGER)

THEN '正确'

ELSE '错误'

END AS valid

FROM person;

注意事项

需要注意的是:

- SQL 判断身份证是否正确仅适用于中国大陆身份证。

- 校验码与身份证号码中的第 17 位数字一致时,身份证不一定正确,还需进一步核对。

- 对于身份证中含有 X 的情况,需要将 X 替换为 10 进行计算。

文章目录
    搜索