idchk.cs
来自「嵌入式开发从基础到提高」· CS 代码 · 共 227 行
CS
227 行
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace IDChecker
{
class IdChk
{
public static void Msg(string strMsg,int intMsg)
//本类的目的是为了显示格式一致的消息框,两个参数,strMsg是消
//息框中显示的文字内容,intMsg是消息框的类型intMsg为1时,弹出
//一个带有一个OK按钮和黄色三角警示符号的消息框,intMsg为2时,
//弹出一个带有一个YES和一个NO按钮和问号的消息框。intMsg为3时,
//弹出一个带有一个OK按钮和字符i图标符号的消息框。
{
switch (intMsg)
//所需指定输出对话框的类型不同而弹出不同的对话框
{
case 1:
MessageBox.Show(strMsg, "ID Checker", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1); ;
break;
case 2:
MessageBox.Show(strMsg, "ID Checker", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
break;
default:
MessageBox.Show(strMsg, "ID Checker", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);
break;
}
}
public static byte ischarlegal(string strIDEachBit)
//对某个字符的合法性进行检查,如果字符是数字,返回1,如果字符
//是数字或者X,则返回2,如果字符既非数字,又非X,则返回0。
{
if (strIDEachBit.Length == 1)
//先判断传入的字符串是否只含有一个字符
{
int intTemp = Convert.ToChar(strIDEachBit);
//将其转换为其相应的ASCII码值
switch (intTemp)
{
case 48:
case 49:
case 50:
case 51:
case 52:
case 53:
case 54:
case 55:
case 56:
case 57:
//如果是0~9的数字,则返回1
return 1;
case 88:
case 120:
//如果是X或者x,则返回2
return 2;
default:
//如果是非数字或者X、x,则返回0
return 0;
}
}
else
{
return 0;
}
}
public static byte is18ChkNumRight(ref string strID)
//通过输入的前17位计算得到一个值,再与输入的第18位进行比较,
//如果相等则返回1,否则返回0。
{
int[] intEachNum = new int[17];
//声明一个用来存储前17位上数字的数组
int intSum = 0;
//用于存储计算校验码的和
int intChkCalcNum = 0;
//用于存储通过前17位数字计算得到的校验码
for (int i = 0; i < 17; i++)
{
intEachNum[i] = Convert.ToChar(strID.Substring(i, 1)) - 48;
//将相应的字符串先显式转换为字符,再隐式转换为数字
switch ((i + 1) % 10)
//对于处于不同位上的数字乘以相应的权,再相加
{
case 0:
intSum = intSum + intEachNum[i] * 3;
break;
case 1:
intSum = intSum + intEachNum[i] * 7;
break;
case 2:
intSum = intSum + intEachNum[i] * 9;
break;
case 3:
intSum = intSum + intEachNum[i] * 10;
break;
case 4:
intSum = intSum + intEachNum[i] * 5;
break;
case 5:
intSum = intSum + intEachNum[i] * 8;
break;
case 6:
intSum = intSum + intEachNum[i] * 4;
break;
case 7:
intSum = intSum + intEachNum[i] * 2;
break;
case 8:
intSum = intSum + intEachNum[i] * 1;
break;
case 9:
intSum = intSum + intEachNum[i] * 6;
break;
default:
break;
}
}
switch (intSum % 11)
//根据和除以11所得余数的不同,再转换为相应的校验码
{
case 0:
intChkCalcNum = 49;
break;
case 1:
intChkCalcNum = 48;
break;
case 2:
intChkCalcNum = 88;
break;
case 3:
intChkCalcNum = 57;
break;
case 4:
intChkCalcNum = 56;
break;
case 5:
intChkCalcNum = 55;
break;
case 6:
intChkCalcNum = 54;
break;
case 7:
intChkCalcNum = 53;
break;
case 8:
intChkCalcNum = 52;
break;
case 9:
intChkCalcNum = 51;
break;
case 10:
intChkCalcNum = 50;
break;
default:
break;
}
int intChkInputNum = Convert.ToChar(strID.Substring(17, 1));
//存储从传入的18位码中取最后一位码得到的校验码
if ((intChkCalcNum == intChkInputNum) || (intChkInputNum == 120))
//将两种不同方式得到的校验码进行对比,如果相同,则返回1,否则返回0
{
return 1;
}
else
{
return 0;
}
}
public static byte is17DateRight(string strPro17)
//检查输入的17位号码的日期是否合法,如果合法则返回1,否则返回
//0
{
int intYear = Convert.ToInt32(strPro17.Substring(6, 4));
//存储从标准17位码中得到的相应的出生年信息
int intMon = Convert.ToInt32(strPro17.Substring(10, 2));
//存储从标准17位码中得到的相应的出月年信息
int intDay = Convert.ToInt32(strPro17.Substring(12, 2));
//存储从标准17位码中得到的相应的出日年信息
if (intYear > 1850 && intYear <= DateTime.Now.Year)
//年被在1850~现在之间,如果超出这个范围,则提示出生年月日信息不合法
{
if (intMon > 0 && intMon < 13)
//月在1~12间之间,如果超出这个范围,则提示出生年月日信息不合法
{
if (intDay > 0 && intDay < 32)
//日期在1~31之间,如果超出这个范围,则提示出生年月日信息不合法
{
if (intMon == 1 || intMon == 3 || intMon == 5 || intMon == 7 || intMon == 8 || intMon == 10 || intMon == 12)
//如果是阳历,则日期不能超过31,否则提示出生年月日信息不合法
{
return 1;
}
else if ((intMon == 4 || intMon == 6 || intMon == 9 || intMon == 11) && intDay < 31)
//如果是4、6、9、11月,则日期不能超过30,否则提示出生年月日信息不合法
{
return 1;
}
else if ((intYear % 4 == 0) && intYear != 2000 && intDay < 30 || intDay < 29)
//如果是非闰年的2月,且不是2000年时候,则日期不能超过28天
{
return 1;
}
else
//闰年的2月可以是29天
{
return 0;
}
}
else
{
return 0;
}
}
else
{
return 0;
}
}
else
{
return 0;
}
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?