ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 38286|回复: 57

计算身份证校验码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-2-22 21:04 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
计算身份证校验码
中国公民的18位身份证号码每一位有代表的意义,其中身份证号码的最后一位是校验码,网上很多文章介绍,计算都很复杂,在此就不多说。
其实算法是这样:把前17位的每一个数字和一串加权因子相乘,计算这些乘积的和(S),加权因子是自右向左,分别是2,2^2,2^3,……2^17,大于10的就模11。用12加上这些乘积的和,再模11得到的数字作为校验码,如果是10则用X表示,如果>10,再模11。


用vba很容易写出计算和校验函数

Function vsm(olds) As String      'olds是前17位码
If Len(olds) = 17 Then
    Dim i, w, s, cs As Integer
    w = 1
    s = 0
    For i = 1 To 17
        w = (w * 2) Mod 11
        cs = Asc(Mid$(olds, 18 - i, 1)) - 48
        If cs >= 0 And cs < 10 Then
            s = s + cs * w
        Else
            vsm = "不是数字!" + Str$(i)
            i = 20
        End If
    Next
     If i = 18 Then
        s = (12 - s Mod 11 ) mod 11
        vsm = LTrim$(Str$(s))
        If s = 10 Then vsm = "X"
     End If
Else
    vsm = "位数不对!"
End If
End Function
[此贴子已经被作者于2007-12-23 9:04:04编辑过]

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2006-2-22 23:37 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-2-25 00:39 | 显示全部楼层
怎么不行啊?能不能做个表上来看看啊,谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-2-25 10:01 | 显示全部楼层

[原创]

huangtaoccb:不好意思,我还不会把文件传上去,你能告诉我吗?

刚学会上传 bLIxo6Or.rar (10.5 KB, 下载次数: 1332)
[此贴子已经被作者于2006-2-25 11:03:19编辑过]

TA的精华主题

TA的得分主题

发表于 2007-6-19 13:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

有没有办法写一个能验证18位身份证是否合法的函数

TA的精华主题

TA的得分主题

发表于 2008-4-5 22:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
代码很简洁。理解起来比chenjun大师的函数容易。

TA的精华主题

TA的得分主题

发表于 2008-6-29 18:13 | 显示全部楼层
QUOTE:
以下是引用minsc_liu在2007-6-19 13:02:40的发言:

有没有办法写一个能验证18位身份证是否合法的函数

上面的加上一条判断最后一位是否相等即可

TA的精华主题

TA的得分主题

发表于 2008-12-5 19:05 | 显示全部楼层
习惯性的输入自己的18位号,返回位数不对。还以为自己非法了。
原来是用前 17位 来算第18位。呵呵我又合法了。
代码很简洁。

TA的精华主题

TA的得分主题

发表于 2009-1-18 10:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
下载慢慢来消化

TA的精华主题

TA的得分主题

发表于 2009-1-17 18:33 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-24 16:58 , Processed in 0.043103 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表