C#编程:正则表达式验证身份证校验码

时间:2022-02-03 16:49:28

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.Text.RegularExpressions;

 

namespace IDCard

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

 

            //参考:%E8%BA%AB%E4%BB%BD%E8%AF%81%E6%A0%A1%E9%AA%8C%E7%A0%81

 

            //校验长度和数字合法性

            string regular = @"\d{17}[\d|X]{1}";

            bool ret = false;

            Regex regex = new Regex(regular);

            ret = regex.IsMatch(textBox1.Text);

 

            //校验位合法性

            if (ret == true)

            {

                int sum = 0;

                int[] a = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };

                string str = textBox1.Text;           

                for (int i = 0; i < 17; i++)

                {

                    sum += a[i] * (int)(str[i]-48);//0的assii码为48

                }

                int mod = sum % 11;

                int[] b = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

                char[] c = { ‘1‘, ‘0‘, ‘X‘, ‘9‘, ‘8‘, ‘7‘, ‘6‘, ‘5‘, ‘4‘, ‘3‘, ‘2‘ };

                char verify=‘0‘;

                for (int i=0; i<11 ;i++)

                {

                    if (mod == b[i])

                    {

                        verify = c[i];

                        break;

                    }

                }

                if ((char)str[17] == verify)

                {

                    ret = true;

                }

                else

                {

                    ret = false;

                }

            }

            

            

            MessageBox.Show(ret.ToString());

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

            textBox1.Text = "34052419800101001X";

        }