2018-03-29 C# 生成随机身份证号码

参考了这篇作者的思路:https://blog.csdn.net/xiaokui_wingfly/article/details/45893791

/*
*为了方便,我将地区设定在了110000 北京。
地区也是可以随机,但是它的数据集太多,我偷懒没有写,如有兴趣可以自行补上。
*/
  class Program
    {
//生成随机年份
        public static int generateYear()
        {
            StringBuilder bu = new StringBuilder();
            Random rd = new Random();
            int year = rd.Next(1900, DateTime.Now.Year);
            bu.Append(year);
            return int.Parse(bu.ToString());
        }
//生成
        public static string generate()
        {
            StringBuilder bu = new StringBuilder();
            Random rd = new Random();
            bu.Append(110000);
            int year = generateYear();
            bu.Append(year);
            int month = rd.Next(1, 12);
            if (month < 10)
            {
                bu.Append(0);
            }
            bu.Append(month);
            int[] days;
            if (isleapyear(year))
            {
                days =new int[12]{31,29,31,30,31,30,31,31,30,31,30,31};
            }
            else
            {
                days = new int[12] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
            }

            int day = rd.Next(1, days[month]);
            if (day < 10)
            {
                bu.Append(0);
            }
            bu.Append(day);
            bu.Append(randomcode());
            int[] c = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
            char[] r = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };
            string convert = bu.ToString();

            int it = 0;
            int res =0;
          //  Console.WriteLine(res);

            while (it<17)
            {
                res = res + (convert[it] - '0') * c[it];
             //   Console.WriteLine("第"+it+"次,"+convert[it]+"乘以"+c[it]);
            //    Console.WriteLine(res);
                it++;
            }


            int i = res%11;
            bu.Append(r[i]);
            return bu.ToString();
        }
//生成3位随机
        public static string randomcode()
        {
            StringBuilder bu = new StringBuilder();
            Random rd = new Random();
            int code = rd.Next(1, 999);
            if (code < 10)
            {
                bu.Append(00);
            }else if (code < 100)
            {
                bu.Append(0);
            }
            bu.Append(code);
            return bu.ToString();
        }


        public static bool isleapyear(int year)
        {
            if (year % 4 == 0)
            {
                if(year % 100 == 0 && year % 400 != 0)
                {
                    return false;
                }
                return true;
            }
            return false;
        }


        static void Main(string[] args)
        {          
            Console.Write(generate());
            Console.ReadKey();
        }
    }
image.png

验证
将程序输出的结果拿到验证网站上面检测是合法号码


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 180,425评论 25 708
  • 在此特此声明:一下所有链接均来自互联网,在此记录下我的查阅学习历程,感谢各位原创作者的无私奉献 ! 技术一点一点积...
    远航的移动开发历程阅读 11,618评论 12 197
  • 7月17日 星期一 暴热升温 好电影的魅力就是你的观影会让路过人的停下来驻足,午休抽空将昨天看了一半的...
    夏尔烟阅读 491评论 0 0
  • 《资本经营论》是和君王明夫先生的著作,本书阐述了以资本市场并购和投融资活动为核心开展资本经营,来提升企业价值,...
    西子锋哥阅读 886评论 0 1
  • 一 今晚听到一个惊天的消息,听说你走了!永远,永远的离开了! 听到这个噩耗,本来躺在床上的我,一下子从被窝里坐了起...
    山妮红叶阅读 649评论 20 49

友情链接更多精彩内容