zoukankan      html  css  js  c++  java
  • C#根据身份证号码,计算生日、年龄、性别

    朋友谈及身份证相关的信息,才了解到原来省份证号码中包含了年龄和性别。

    这样在数据库中,就不必单独留字段存放它们了(不过,要根据具体情况来,要是读取频率较高,还是单独列出为好),这样顺带解决了年龄变更的问题。

    程序仅仅为了实现这个功能,里面还是需要数据验证的,用户输入的信息,毕竟在猿类看来,都是“非法的”。废话不多说了,贴上我写的程序,还请路过的大神斧正:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Threading.Tasks;
    
    namespace calculateAgeBirthdatSexDemo
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                string identityCard = "32128119930718125X";//随便拼的,如有雷同,纯属搞怪哈
                BirthdayAgeSex entity = new BirthdayAgeSex();
                entity=GetBirthdayAgeSex(identityCard);
                if (entity != null)
                {
                    Console.WriteLine(entity.Birthday + "-----" + entity.Sex + "-----" + entity.Age);
                }
                Console.ReadLine();
            }
    
            public static BirthdayAgeSex GetBirthdayAgeSex(string identityCard)
            {
                if (string.IsNullOrEmpty(identityCard))
                {
                    return null;
                }
                else
                {
                    if (identityCard.Length != 15 && identityCard.Length != 18)//身份证号码只能为15位或18位其它不合法
                    {
                        return null;
                    }
                }
    
                BirthdayAgeSex entity = new BirthdayAgeSex();
                string strSex = string.Empty;
                if (identityCard.Length == 18)//处理18位的身份证号码从号码中得到生日和性别代码
                {
                    entity.Birthday = identityCard.Substring(6, 4) + "-" + identityCard.Substring(10, 2) + "-" + identityCard.Substring(12, 2);
                    strSex = identityCard.Substring(14, 3);
                }
                if (identityCard.Length == 15)
                {
                    entity.Birthday = "19" + identityCard.Substring(6, 2) + "-" + identityCard.Substring(8, 2) + "-" + identityCard.Substring(10, 2);
                    strSex = identityCard.Substring(12, 3);
                }
                
                entity.Age = CalculateAge(entity.Birthday);//根据生日计算年龄
                if (int.Parse(strSex) % 2 == 0)//性别代码为偶数是女性奇数为男性
                {
                    entity.Sex = "";
                }
                else
                {
                    entity.Sex = "";
                }
                return entity;
            }
    
            /// <summary>
            /// 根据出生日期,计算精确的年龄
            /// </summary>
            /// <param name="birthDate">生日</param>
            /// <returns></returns>
            public static int CalculateAge(string birthDay)
            {
                DateTime birthDate=DateTime.Parse(birthDay);
                DateTime nowDateTime=DateTime.Now;
                int age = nowDateTime.Year - birthDate.Year;
                //再考虑月、天的因素
                if (nowDateTime.Month < birthDate.Month || (nowDateTime.Month == birthDate.Month && nowDateTime.Day < birthDate.Day))
                { 
                    age--; 
                }
                return age;
            }
    
            /// <summary>
            /// 定义 生日年龄性别 实体
            /// </summary>
            public class BirthdayAgeSex
            {
                public string Birthday { get; set; }
                public int Age { get; set; }
                public string Sex { get; set; }
            }
        }
    }

    (ps:多年前写的了,今天看了下,确实很水啊。。。。)

    作者:Eric Li
    出处:http://www.cnblogs.com/ericli-ericli/
    除转载文章外,随笔版权归作者和博客园所有,欢迎转载,转载请标明出处。
    如果您觉得本篇博文对您有所收获,觉得作者还算用心,请点击右下角的 [推荐],谢谢!

  • 相关阅读:
    Java 代码界 3% 的王者?看我是如何解错这 5 道题的
    你想成为什么级别的程序员?
    我竟然不再抗拒 Java 的类加载机制了
    程序员,你自豪什么
    你竟然没用 Maven 构建项目?
    一名合格的程序员应该是什么样子
    TDD(测试驱动开发)死了吗?
    Java Serializable:明明就一个空的接口嘛
    一个理想主义的程序员
    教妹学 Java:动态伴侣 Groovy
  • 原文地址:https://www.cnblogs.com/ericli-ericli/p/4716365.html
Copyright © 2011-2022 走看看