作者KisB (KB)
看板C_Sharp
标题[问题] 身份证检查
时间Wed Mar 28 21:10:15 2012
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CheckID
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// 在txtId文字方块按下键盘再放开时执行
private void txtId_KeyPress(object sender, KeyPressEventArgs e)
{
if (txtId.Text == "")
{
//取得身份证号码第1个字是英文字母,并将小写字母转成大写字母
string str = Convert.ToString(e.KeyChar).ToUpper();
if (str.CompareTo("A") < 0 || str.CompareTo("Z") > 0)
{
e.Handled = true;
}
}
else
{
//身份证第2~10个字只能输入0~9或退位键
if ((e.KeyChar.CompareTo('0') < 0 || e.KeyChar.CompareTo('9') > 0) && e.KeyChar != '\b')
{
e.Handled = true;
}
}
}
// 按 [检查] 钮时执行
private void btnCheck_Click(object sender, EventArgs e)
{
//身份证字数不是10位,不合法
if (txtId.Text.Length != 10)
{
lblMsg.Text = "身份证号码不合法!!";
lblMsg.ForeColor = Color.Red;
return; // 离开此事件处理函式
}
//将身份证号码第一个英文字母转换成对应的数值
int[] head = new int[] { 10, 11, 12, 13, 14, 15, 16, 17, 34, 18, 19, 20, 21, 22, 35, 23, 24, 25, 26, 27, 28, 29, 30, 41, 42, 33 };
int id_head;
id_head = head[Convert.ToChar(txtId.Text.Substring(0, 1).ToUpper()) - ('A')];
//组合转换过的身份证号码id
string id = id_head + txtId.Text.Substring(1, 9);
//使用公式计算身份证号码是否合法
int n =
Convert.ToInt32(id.Substring(0, 1)) +
Convert.ToInt32(id.Substring(1, 1)) * 9 +
Convert.ToInt32(id.Substring(2, 1)) * 8 +
Convert.ToInt32(id.Substring(3, 1)) * 7 +
Convert.ToInt32(id.Substring(4, 1)) * 6 +
Convert.ToInt32(id.Substring(5, 1)) * 5 +
Convert.ToInt32(id.Substring(6, 1)) * 4 +
Convert.ToInt32(id.Substring(7, 1)) * 3 +
Convert.ToInt32(id.Substring(8, 1)) * 2 +
Convert.ToInt32(id.Substring(9, 1)) +
Convert.ToInt32(id.Substring(10, 1));
if ((n % 10) == 0) // 判断身份证是否合法
{
lblMsg.Text = "身份证号码合法!!";
lblMsg.ForeColor = Color.Blue;
}
else
{
lblMsg.Text = "身份证号码不合法!!";
lblMsg.ForeColor = Color.Red;
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
以上是程式码全部内容
想请问的是
id_head = head[Convert.ToChar(txtId.Text.Substring(0, 1).ToUpper()) - ('A')];
//组合转换过的身份证号码id
关於这地方不是很了解 -('A')的用意是什麽
有人可以帮我解释吗??
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 27.247.160.86
1F:→ evirtues:A~Z分别对应head[0]~head[25],'D'-'A'=3所以D对应head[3] 03/28 21:59
2F:→ KisB:那Y值43对应head[33]? 03/28 23:00
3F:→ KisB:是42 03/28 23:03
4F:→ evirtues:'Y'-'A'=24 Y对应head[24]=42 03/28 23:34
5F:推 tomex:写的程式技巧不是很好,很多字串函数更好用,也可更简短 03/29 09:49