社区
Delphi
帖子详情
求教身份证编码规则
soft8
2003-10-14 09:14:24
有那位大哥知道身份证最后一位的编码规则啊,多谢了。
能给出算法最好。
...全文
65
6
打赏
收藏
求教身份证编码规则
有那位大哥知道身份证最后一位的编码规则啊,多谢了。 能给出算法最好。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tanqth
2003-10-14
打赏
举报
回复
身份证校验码产生方法:(我已编程试过十几个身份证号)
∑(ai×Wi)(mod 11)……………………………………(1)
公式(1)中:
i----表示号码字符从由至左包括校验码在内的位置序号;
ai----表示第i位置上的号码字符值;
Wi----示第i位置上的加权因子,其数值依据公司Wi=2(n-1)(mod 11)计算得出。
i 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1
根据公式(1)进行计算,然后根据计算的结果,从下面的表中查出相应的校验码,其中X表示计算结果为10:
∑(ai×WI)(mod 11) 0 1 2 3 4 5 6 7 8 9 10
校验码字符值ai 1 0 X 9 8 7 6 5 4 3 2
function TForm1.f(ID: string):string;
const
W:array [1..18] of integer = (7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
A:array [0..10] of char = ('1','0','x','9','8','7','6','5','4','3','2');
var
i, j, S: integer;
NewID: string;
begin
if Length(ID) <> 15 then
result:= ''
else begin
NewID:= ID;
Insert('19', NewID, 7);
S:= 0;
try
for i:=1 to 17 do begin
j:= StrToInt(NewID[i]) * W[i];
S:= S + j;
end;
except
result:= '';
exit;
end;
S:= S mod 11;
Result:= NewID + A[S];
end;
end;
这个简单一点,上面那个全面一点(有取生日、地区、性别),
耙子
2003-10-14
打赏
举报
回复
http://www.csdn.net/develop/article/14/14687.shtm
很早以前我写的。
tanqth
2003-10-14
打赏
举报
回复
procedure TjbqkForm.sflz(ID: string);
const
W: array[1..18] of integer = (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1);
A: array[0..10] of char = ('1', '0', 'x', '9', '8', '7', '6', '5', '4', '3', '2');
var
NewID: string;
// xb, dq: string;
i, j, S: integer;
begin
case Length(ID) of
0: MessageDlg('该员工无身份证!', mtError, [mbOK], 0);
15: begin
NewID := copy(id, 1, 2);
if DM.ATqy.Locate('编码', NewID, []) then
DBEdit3.Text := trim(DM.ATqy.FieldByName('区域名称').AsString);
NewID := copy(id, 1, 4);
if DM.ATqy.Locate('编码', NewID, []) then
DBEdit3.Text := trim(DBEdit3.Text) + trim(DM.ATqy.FieldByName('区域名称').AsString);
NewID := copy(id, 1, 6);
if DM.ATqy.Locate('编码', NewID, []) then
Dm.AQjbxx.FieldByName('籍贯').AsString := trim(DBEdit3.Text) + trim(DM.ATqy.FieldByName('区域名称').AsString);
DBDateEdit1.Date := strtodate('19' + copy(id, 7, 2) + '-' + copy(id, 9, 2) + '-' + copy(id, 11, 2));
if odd(strtoint(copy(id, 15, 1))) then
Dm.AQjbxx.FieldByName('性别').AsString := '男'
else
Dm.AQjbxx.FieldByName('性别').AsString := '女';
end;
18: begin
S := 0;
try
for i := 1 to 17 do begin
j := StrToInt(NewID[i]) * W[i];
S := S + j;
end;
except
MessageDlg('身份证有误,请重新输入!', mtError, [mbOK], 0);
end;
S := S mod 11;
if (copy(id, 18, 1) = A[S]) then
begin
NewID := copy(id, 1, 2);
if DM.ATqy.Locate('编码', NewID, []) then
DBEdit3.Text := trim(DM.ATqy.FieldByName('区域名称').AsString);
NewID := copy(id, 1, 4);
if DM.ATqy.Locate('编码', NewID, []) then
DBEdit3.Text := trim(DBEdit3.Text) + trim(DM.ATqy.FieldByName('区域名称').AsString);
NewID := copy(id, 1, 6);
if DM.ATqy.Locate('编码', NewID, []) then
Dm.AQjbxx.FieldByName('籍贯').AsString := trim(DBEdit3.Text) + trim(DM.ATqy.FieldByName('区域名称').AsString);
DBDateEdit1.Date := strtodate(copy(id, 7, 4) + '-' + copy(id, 11, 2) + '-' + copy(id, 13, 2));
if odd(strtoint(copy(id, 17, 1))) then
Dm.AQjbxx.FieldByName('性别').AsString := '男'
else
Dm.AQjbxx.FieldByName('性别').AsString := '女';
end
else begin
MessageDlg('身份证输入错误,请重新输入!', mtError, [mbOK], 0);
end;
end;
else
begin
MessageDlg('身份证输入错误,请重新输入!', mtError, [mbOK], 0);
end;
end;
end;
这是我的源码,自己看看,不懂再说.
966126
2003-10-14
打赏
举报
回复
新号码的最后一位是校验码,根据前面的数字算出来的
966126
2003-10-14
打赏
举报
回复
最后一位x是临时身份证??你听谁说的阿
男单女负是最后第二位
angelior
2003-10-14
打赏
举报
回复
用X代替的是臨時身分証
男的為單數
女的為雙數
并且:你爸為1,你哥為3。。。這樣下去
你媽為2,你姐為5。。。這樣下去,(數字4不用)
数据处理救星降世Power Query
0/ Excel数据处理新利器来了,准备好了吗? 1/ 比网红函数VLOOKUP还全面的功能。——查(查询) 2/ 取其精华,去其糟粕。...——聚(聚合) 9/ 我自己的难题自己造函数,不
求教
别人。——技法(自定义函数)
7-63 查验
身份证
(15 分)
校验码的计算
规则
如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值: Z:0 1 2 3 ...
test1
用户登录后进入竞猜页面,可以查看可竞猜的比赛,并选择队伍进行投注,后台会统计所有用户在该比赛累积的积分,当比赛结束时将会通知用户竞猜结果并按照上述的分配
规则
为结果正确的用户给予积分奖励,并更新所有用户...
WEB开发文档2 总结
编码
人员和美工的配合问题 在线用户列表的解决方案(解决用户意外退出在线列表无法及时更新问题) 『分享』SourceSafe经典FAQ+忘记Admin密码的解决方法 资源文件的使用? Asp.net页面的生命...
MS-SQL Server 基础类 - SQL语句
无法解决equal to操作的排序
规则
冲突? 关于特殊字符的插入 怎么在SQL Server的存储过程中实现对文本的操作? 一个高难度SQL语句,我想了三天三夜,或许根本就没有解 "=" 和 "like" SQL语句中妙用SUM()函数和BIT字段...
Delphi
5,388
社区成员
262,730
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章