A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王超洋 中级黑马   /  2012-5-18 02:24  /  2682 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

要求用户输入身份证号,如果用户输入的有不是数字或不等于18位就给用户报错,这个程序该如何写?想了半天没想出来,求解。。
            string str1 = textBox1.Text;
            //str1.Substring(1,str1.Length);
            //for (int i = 0; i <= str1.Length;i++ )
            //{
            //    int i1;
            //    if(int.TryParse(str1,out i1)==false||i!=18)
            //    {
            //        MessageBox.Show("输入错误");
            //        return;
            //    }
            //}
str1是用户输入的字符串,这个是我写的,调试错误..

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

6 个回复

倒序浏览
使用正则表达式,很简单滴,如果需要不用正则表达式的,你说下,我也给你写下代码
这种方法要先加入声明命名空间:
using System.Text.RegularExpressions;
然后在方法中声明验证规则:
string s_reg = @"^\d{18}$";
声明要验证的字符串:
string s = textBox1.Text;
新建一个实例,并将验证规则以参数形式传入实例,
初始化类: Regex reg = new Regex( s_reg );
然后拿实例对要验证的字符串进行验证,返回结果为bool值:
if ( reg.IsMatch (s) )
{  
      MessageBox.Show( "It 's OK~");
  }
else
  {
     MessageBox.Show( "It 's Bad~");
}

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
Console.WriteLine("请输入18位有效身份证号");
            string s = Console.ReadLine();
            if (s.Length == 18)//可以把string类型看做一个char数组,这里就判断数组长度是否为18
            {
                    try
                    {
                        long j = Convert.ToInt64(s);//将输入的转换为长整形,失败就证明不是数字。
                        Console.WriteLine("{0}",j);
                    }
                    catch
                    {
                        Console.WriteLine("输入非法");
                    }
            }
            else
            {
                Console.WriteLine("身份证必须为18位数");
            }
            Console.ReadKey();

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
就想到这个方法,本来想将18位的一个一个字符强制转换的,但是发现不管输入的是不是数字,都转换成ascii码值了。
回复 使用道具 举报
Console.WriteLine("请输入18位有效身份证号");
            string s = Console.ReadLine();
            if (s.Length == 18)//可以把string类型看做一个char数组,这里就判断数组长度是否为18
            {
                for (int i = 0; i < s.Length; i++)
                {
                    if (Char.IsDigit(s[i]))//判断s中每一个字符是否是数字
                    {
                        Console.WriteLine(s[i]);
                    }
                    else
                    {
                        Console.WriteLine("身份证必须由数字组成");
                        Console.ReadKey();
                    }
                    return;
                 }
            }
            else
            {
                Console.WriteLine("身份证必须为18位数");
            }
            Console.ReadKey();
这个是刚刚我问了别人回答之后,我再优化了一下。
回复 使用道具 举报
首先,你可以学习一下正则表达式!!代码如下

//引用命名空间
using System.Text.RegularExpressions;


namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("请输入您18位或者15位的身份证:");
            string card = Console.ReadLine();
            string RegCard = @"^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$";
            Match match = Regex.Match(card, RegCard);
            if (match.Groups.Count <= 1)
            {
                Console.WriteLine("身份证输入有误!");
                Console.ReadKey();
            }
        }
    }
}
回复 使用道具 举报
直接正则啊,很简单的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马