身份证号码15位到18位的转换
来源:互联网 发布:山东师范大学网络平台 编辑:程序博客网 时间:2024/06/05 10:41
完整文章和代码下载:http://www.dingos.cn/index.php?topic=958.0
- 程序初始界面:
- 输入15为身份证号码,点击“转换”按钮后,进行验证:
- 没有输入身份证号码:
- 输入的不是15位:
- 身份证号码中包含非数字:
- 正确的身份证转换为18位身份证,并显示出生日期和性别:
- 没有输入身份证号码:
- 点击“重新输入”去空文本框等
- 转换算法:
- 在6位行政区划后插入2为世纪代码(如19),构成四位出生年份,得到17位号码;
- 把17位号码从高位到底位与下拉17个数字分别相乘求和(N):
[2, 4, 8, 5, 10, 9, 7, 3, 6, 1, 2, 4, 8, 5, 10, 9, 7]
比如身份证号码为:C1C2C3...C17,则N = C17 × 2 + C16 × 4 + ... + C1 × 7 - 将N除以11取余数R,根据余数计算尾数T:
- 如果R = 0,则T = 1;如果R = 1,则T = 0;如果R = 2,则T = X;
- 如果R = 3,则T = 9;如果R = 4,则T = 8;依此类推……;如果R = 10,则T = 2;
- 将尾数T添加到17为号码后既得到18为号码。
- 根据身份证号的第7-14位(YYYYMMDD),显示出生日期;
- 根据身份证号的第17位(奇数为男性,偶数为女性),显示性别;
【分析】
★ 定义字符串strCardID用于接收文本框输入的信息;
★ 定义一个字符数组oldCardID用于保存15位的原始身份证;
★ 并定义一个字符数组newCardID用于保存转换后的18位的身份证;
★ 将oldCardID的第0位到5位之间保存到newCardID的第0位到5位;
★ newCardID第6位和第7为分别是“1”和“9”;
★ 将oldCardID第6到14保存到newCardID的第8位到第16位;
★ 根据公式“N = C17 × 2 + C16 × 4 + ... + C1 × 7”求出newCardID的第17为;
★ 将字符数组newCardID转换成字符串,并显示;
★ 同时将生日、性别显示
1. 判断输入是否输入身份证
- if(strCardID == "") {
- lblShowMessage.Text = "您没有输入身份证号码,请正确输入";
- return;
- }
2. 判断输入的身份证长度是否等于15位
- if(strCardID.Length != 15) {
- lblShowMessage.Text = "您输入的身份证号码的位数为" + txtCardID.Text.Length + ",请重新输入";
- return;
- }
【转换事件处理】
3. 判断输入的15位身份证的每一都是整型
可以将15位字符串转换为长整型数据,如果不出现异常则每一位都是整型,否则就包含非整型字符
- try {
- iCardID = long.Parse(strCardID);
- } catch {
- lblShowMessage.Text = "您输入的身份证号码包含非数字,请重新输入";
- }
【转换事件处理】
4. 将15位身份证字符串保存到15位字符数组oldCardID中
定义一个18为的字符数组newCardID用于保存新身份证号码
将oldCardID的第0位到第5位保存到newCardID的第第0位到第5位中
为newCardID的第6位和第7位分别赋值为'1'和'9'
将oldCardID的第6为到第14为保存到newCardID的第8位到第16位中
- char[] oldCardID = strCardID.ToCharArray();
- char[] newCardID = new char[18];
- for(int i = 0; i < 6; i++) {
- newCardID[i] = oldCardID[i];
- }
- newCardID[6] = '1';
- newCardID[7] = '9';
- for(int i = 6; i < oldCardID.Length; i++) {
- newCardID[i + 2] = oldCardID[i];
- }
【转换事件处理】
5. 定义一个整型数组quan用于保存权值
定义一个整型变量N用于求新身份证的第0位到第16位和权值乘积的和
根据N对11取模得到的值得到新身份证的第17位
- int N = 0;
- int[] quan = new int[] { 2, 4, 8, 5, 10, 9, 7, 3, 6, 1, 2, 4, 8, 5, 10, 9, 7 };
- for(int i = 0; i < quan.Length; i++) {
- N = N + quan[i] * (newCardID[quan.Length - i - 1] - 48);
- }
- N %= 11;
- switch(N) {
- case 0:
- newCardID[17] = '1';
- break;
- case 1:
- newCardID[17] = '0';
- break;
- case 2:
- newCardID[17] = 'X';
- break;
- case 3:
- newCardID[17] = '9';
- break;
- case 4:
- newCardID[17] = '8';
- break;
- case 5:
- newCardID[17] = '7';
- break;
- case 6:
- newCardID[17] = '6';
- break;
- case 7:
- newCardID[17] = '5';
- break;
- case 8:
- newCardID[17] = '4';
- break;
- case 9:
- newCardID[17] = '3';
- break;
- case 10:
- newCardID[17] = '2';
- break;
- }
【转换事件处理】
6. 将新身份证的字符数组中的内容显示
- foreach(char ch in newCardID) {
- lblCardIDNew.Text += ch;
- }
【转换事件处理】
7. 显示生日日期
在新身份证数组中的6位到第9为是出生年;第10和11位为出生月;第12和13位为出生日
- for(int i = 6; i < 10; i++) {
- lblShowBirthday.Text += newCardID[i];
- }
- lblShowBirthday.Text += "年";
- for(int i = 10; i < 12; i++) {
- lblShowBirthday.Text += newCardID[i];
- }
- lblShowBirthday.Text += "月";
- for(int i = 12; i < 14; i++) {
- lblShowBirthday.Text += newCardID[i];
- }
- lblShowBirthday.Text += "日";
【转换事件处理】
8. 显示性别
新身份证数组的第16位为奇数表示性别为“男”,为偶数表示性别为“女”
- if((newCardID[16] % 2) == 0)
- lblShowSex.Text = "女";
- else
- lblShowSex.Text = "男";
【实现重输按钮事件】
重置清除文本框中的内容、标签等内容
- txtCardID.Text = "";
- lblCardIDNew.Text = "";
- lblShowBirthday.Text = "";
- lblShowSex.Text = "";
- lblShowMessage.Text = "请重新输入";
- 身份证号码15位到18位的转换
- 使用C#实现身份证号码15位到18位的转换
- 身份证号码15到18位升位算法
- Java身份证号码验证及将15位转换18位
- DB2中15位与18位身份证号码转换过程
- 关于更新身份证号码 从15位到18位
- java代码实现15位身份证号码升级到18位
- java代码实现15位身份证号码升级到18位
- 15位身份证号码转换成18位身份证号码(java代码)
- 产生所有的18位和15位的身份证号码
- 身份证号码的验证及15位升18位算法
- Javascript实现身份证号码15位转18位的算法
- 15位和18位身份证号码的结构介绍
- js中15位及18位身份证号码的校验
- 18位身份证号码的校验
- Excel实现身份证号码自动转换为18位的技巧
- 身份证号码15位升18位(C#)
- 身份证号码15位升18位(C#)
- Windows安全属性的设定
- 五种垂直性网站最值得投资
- 辛苦是幸福的开端
- 为奥运时刻准备 中国金融机构提供电子金融服务
- 我国大多数企业已进入IT应用的发展阶段
- 身份证号码15位到18位的转换
- 西班牙电信计划增持中国网通5.74%股权
- DATAWINDOW中自动生成的SQL语句怎么where 后边是空的?不是有setFilter()了吗。
- JAVA序列化机制学习札记
- 奚国华:电信业要提高服务质量 服务大众
- QTP9.2安装时,报错:WinXPSP2_Rmt_Agent_Fix,缺少对象
- 一叶知秋
- 小强的战役
- 信息化高速公路带动金融业现代化发展