`
chatlv
  • 浏览: 5172 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于身份15位转18位、计算周岁、性别、出生日期

阅读更多
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import com.start.lemis.apps.commons.code.Aac004;

/**
* 身份证相关操作
* @author Lvrl
*
*/
public class IDCard {
/**
* 构造方法
*/
public IDCard(){

}


/**
* 功能:把15位身份证转换成18位
* @param  id
* @return newid or id
*/
public static final String getIDCard_18bit(String id)
{
  //若是15位,则转换成18位;否则直接返回ID
  if(15 == id.length()){
  final int [] W =
        {
        7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1};
   final String [] A =
   {
        "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
  int i,j,s=0;
  String newid;
   newid = id;
   newid =newid.substring(0,6)+"19"+newid.substring(6,id.length());
   for ( i=0;i<newid.length() ;i++ )
   {

   j= Integer.parseInt(newid.substring(i,i+1))*W[i];
   s=s+j;
   }
   s = s%11;
   newid=newid+A[s];
 
   return newid;
  }else{
  return id;
  } 

}

/**
* 从身份证获取出生日期
* @param cardNumber 已经校验合法的身份证号
* @return Strig YYYY-MM-DD 出生日期
*/
public static String getBirthDateFromCard(String cardNumber){
String card = cardNumber.trim();
    String year;
    String month;
    String day;
    if (card.length()==18){ //处理18位身份证
        year=card.substring(6,10);
        month=card.substring(10,12);
        day=card.substring(12,14);
    }else{ //处理非18位身份证
    year=card.substring(6,8);
        month=card.substring(8,10);
        day=card.substring(10,12);
    year="19"+year;        
    }
    if (month.length()==1){
        month="0"+month; //补足两位
    }
    if (day.length()==1){
        day="0"+day; //补足两位
    }
    return year+"-"+month+"-"+day;
}

/**
* 从身份证获取性别
* @param cardNumber 已经校验合法的身份证号
* @return String Sex 性别
*/
public static String getSexFromCard(String cardNumber){
String inputStr=cardNumber.toString();
    int sex;
    if (inputStr.length()==18)
    {
        sex=inputStr.charAt(16);
        if (sex%2==0)
        {
            return Aac004.AAC0004_FEMALE;
        }else{
            return Aac004.AAC004_MALE;
        }
    }else{
        sex=inputStr.charAt(14);
        if (sex%2==0)
        {
            return Aac004.AAC0004_FEMALE;
        }else{
            return Aac004.AAC004_MALE;
        }
    }
}

/**
* 从身份证获取出生日期
* @param cardNumber 已经校验合法的身份证号
* @return Strig YYYY-MM-DD 出生日期
*/
public static java.sql.Date getBirthFromCard(String cardNumber){
String birthString=getBirthDateFromCard(cardNumber);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
java.sql.Date birthDate= new java.sql.Date(new Date().getTime());
//将字符串转换为Date
try {
Date date = df.parse(birthString);
birthDate=new java.sql.Date(date.getTime());
} catch (ParseException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
return  birthDate;

}

/**
* 根据身份证计算周岁
*/
public static   int   getAge(String   IDCardNum)
{  
        Calendar   cal1   =   Calendar.getInstance();  
        Calendar   today   =   Calendar.getInstance();
        //如果身份证15位则将其转化为18位
        if(IDCardNum.length()==15)
        IDCardNum=getIDCard_18bit(IDCardNum);
        cal1.set(Integer.parseInt(IDCardNum.substring(6,10)),  
        Integer.parseInt(IDCardNum.substring(10,12)),  
        Integer.parseInt(IDCardNum.substring(12,14)));  
        return   getYearDiff(today, cal1);  
    }  
 
   public static  int   getYearDiff(Calendar   cal,   Calendar   cal1)
   {  
       int   m   =   (cal.get(cal.MONTH))   -   (cal1.get(cal1.MONTH));  
       int   y   =   (cal.get(cal.YEAR))   -   (cal1.get(cal1.YEAR));  
       return   (y   *   12   +   m)/12;  
   }  

}
1
0
分享到:
评论
5 楼 hifun 2008-09-07  
推算方式:身份证号的每一位都对应一个数字,每两个相乘然后再全部相加之和除以11,最后的余数就是最后一位数!如果余数是10,则最后一位是X
4 楼 hifun 2008-09-07  
建议再加上一些功能,比如算出该号的人出生地,性别之类的。
3 楼 hifun 2008-09-07  
id!=15 就 return id 啊?
有这么做的吗?

要是 <15 位呢? 或者>15  <18 又或者是 >18位呢,判断在哪里?
2 楼 easyroom 2008-09-04  
好吧,原谅你了,ubb不管用了
1 楼 easyroom 2008-09-04  
看得我头疼
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import com.start.lemis.apps.commons.code.Aac004;

/**
* 身份证相关操作
* @author Lvrl
*
*/
public class IDCard {
/**
* 构造方法
*/
public IDCard(){

}


/**
* 功能:把15位身份证转换成18位
* @param id
* @return newid or id
*/
public static final String getIDCard_18bit(String id)
{
//若是15位,则转换成18位;否则直接返回ID
if(15 == id.length()){
final int [] W =
{
7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1};
final String [] A =
{
"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
int i,j,s=0;
String newid;
newid = id;
newid =newid.substring(0,6)+"19"+newid.substring(6,id.length());
for ( i=0;i<newid.length() ;i++ )
{

j= Integer.parseInt(newid.substring(i,i+1))*W[i];
s=s+j;
}
s = s%11;
newid=newid+A[s];

return newid;
}else{
return id;
}

}

/**
* 从身份证获取出生日期
* @param cardNumber 已经校验合法的身份证号
* @return Strig YYYY-MM-DD 出生日期
*/
public static String getBirthDateFromCard(String cardNumber){
String card = cardNumber.trim();
String year;
String month;
String day;
if (card.length()==18){ //处理18位身份证
year=card.substring(6,10);
month=card.substring(10,12);
day=card.substring(12,14);
}else{ //处理非18位身份证
year=card.substring(6,8);
month=card.substring(8,10);
day=card.substring(10,12);
year="19"+year;
}
if (month.length()==1){
month="0"+month; //补足两位
}
if (day.length()==1){
day="0"+day; //补足两位
}
return year+"-"+month+"-"+day;
}

/**
* 从身份证获取性别
* @param cardNumber 已经校验合法的身份证号
* @return String Sex 性别
*/
public static String getSexFromCard(String cardNumber){
String inputStr=cardNumber.toString();
int sex;
if (inputStr.length()==18)
{
sex=inputStr.charAt(16);
if (sex%2==0)
{
return Aac004.AAC0004_FEMALE;
}else{
return Aac004.AAC004_MALE;
}
}else{
sex=inputStr.charAt(14);
if (sex%2==0)
{
return Aac004.AAC0004_FEMALE;
}else{
return Aac004.AAC004_MALE;
}
}
}

/**
* 从身份证获取出生日期
* @param cardNumber 已经校验合法的身份证号
* @return Strig YYYY-MM-DD 出生日期
*/
public static java.sql.Date getBirthFromCard(String cardNumber){
String birthString=getBirthDateFromCard(cardNumber);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
java.sql.Date birthDate= new java.sql.Date(new Date().getTime());
//将字符串转换为Date
try {
Date date = df.parse(birthString);
birthDate=new java.sql.Date(date.getTime());
} catch (ParseException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
return birthDate;

}

/**
* 根据身份证计算周岁
*/
public static int getAge(String IDCardNum)
{
Calendar cal1 = Calendar.getInstance();
Calendar today = Calendar.getInstance();
//如果身份证15位则将其转化为18位
if(IDCardNum.length()==15)
IDCardNum=getIDCard_18bit(IDCardNum);
cal1.set(Integer.parseInt(IDCardNum.substring(6,10)),
Integer.parseInt(IDCardNum.substring(10,12)),
Integer.parseInt(IDCardNum.substring(12,14)));
return getYearDiff(today, cal1);
}

public static int getYearDiff(Calendar cal, Calendar cal1)
{
int m = (cal.get(cal.MONTH)) - (cal1.get(cal1.MONTH));
int y = (cal.get(cal.YEAR)) - (cal1.get(cal1.YEAR));
return (y * 12 + m)/12;
}

} 

相关推荐

    根据身份证号码计算出生日期、年龄、性别(18位) 根据入职时间计算工龄

    适用于OA项目中这些对档案的管理 1、根据身份证号码计算出生日期、年龄、性别(18位) 代码如下: //获取输入身份证号码 var UUserCard = $(“#UUserCard”).val(); //获取出生日期 //UUserCard.substring(6, 10) + ...

    delphi 通过日期计算年龄

    假设我们已经有了一个 `TDate` 类型的变量 `BirthDate` 存储了用户的出生日期,我们可以使用 `Now` 函数获取当前日期,并用这两个日期进行计算。 计算年龄的基本步骤如下: 1. 获取当前日期:`CurrentDate := Now;...

    QT身份证、生日计算年龄(包含源代码)

    2、周岁:计算日期-出生日期,不满的一年舍掉。虚岁计算日期的年份-出生日期的年份+1. 3、最小年龄和最大年龄用来设置输出年龄的范围。 4、计算日期默认为系统日期,可设置任意日期(例:2019年底须计算2020年体检...

    出生率和死亡率如何计算.pdf

    若出生人数的计算期不足一年或大于一年,需折算为年出生人数,例如,将半年的出生人数乘以2,五年的出生人数除以5,等等。 出生率是就全体人口计算的, 故称总出生率或粗出生率。根据研究任务的不同,就人口中某一...

    EXCEL电子表格用函数计算年龄、工龄及从身份证中算出周岁等技巧.pdf

    8. EXCEL用身份证号计算年龄:使用DATEDIF函数,例如=DATEDIF(--TEXT((LEN(A1)=15)*19&MID(A1,7,6+(LEN(A1)=18)*2),"0-00-00"),TODAY(),"y")&" 周岁零"&DATEDIF(--TEXT((LEN(A1)=15)*19&MID(A1,7,6+(LEN(A1)=18)*2),...

    如何在Ecel中填写身份证号码后自动提取出生年日年龄性别.pdf

    同时,用于显示性别的B1单元格和显示周岁的D1单元格应设置为常规格式,而用于显示出生日期的C1单元格应设置为日期格式。 1. **显示性别**: 在B1单元格中,可以输入以下公式来判断性别: ```excel =IF(A1="",...

    EXCEL电子表格用函数计算年龄、工龄及从身份证中算出周岁等技巧知识.pdf

    11. EXCEL用身份证号计算年龄截止到当前日期,要求精确一些,使用DATEDIF函数,例如=DATEDIF(--TEXT((LEN(A1)=15)*19&MID(A1,7,6+(LEN(A1)=18)*2),"0-00-00"),TODAY(),"y")&" 周岁零"&DATEDIF(--TEXT((LEN(A1)=15)*...

    EXCEL电子表格用函数计算年龄、工龄及从身份证中算出周岁等技巧整理.pdf

    =DATEDIF(--TEXT((LEN(A1)=15)*19&MID(A1,7,6+(LEN(A1)=18)*2),"0-00-00"),TODAY(),"y")&" 周岁零"&DATEDIF(--TEXT((LEN(A1)=15)*19&MID(A1,7,6+(LEN(A1)=18)*2),"0-00-00"),TODAY(),"ym")&" 月"&DATEDIF(--TEXT(...

    IDCard性别问题解决

    中国的身份证号码由18位数字组成,其中包含了出生日期、地区代码和校验码等信息。性别信息隐藏在第17位数字上,奇数代表男性,偶数代表女性。例如,如果第17位是1、3、5、7、9,那么该身份证对应的性别就是男性;...

    JS实现根据出生年月计算年龄

    如果构造的日期与输入的日期相等(即年、月、日均一致),函数会计算当前年份与出生年份的差值,得出年龄,并以"年龄=xx周岁"的格式返回。 如果输入的日期格式不正确,函数会返回"输入的日期格式错误!"。在示例中...

    EXCEL表格函数公式大全模板.doc

    18位号码通常包含出生日期、性别和校验码等信息,而15位号码在后来的系统中被转换为18位,因此处理时需要进行相应的判断。 在进行年龄计算时,需要注意的是,身份证号码中的出生日期并不一定代表实际的生日,因此在...

    php简单计算年龄的方法(周岁与虚岁)

    该函数接收两个参数:$date表示出生日期的时间戳,$type则用来区分是计算周岁还是虚岁。时间戳是一种特殊的数值,用来表示自1970年1月1日00:00:00 UTC以来经过的秒数。 在函数中,首先通过time()函数获取当前时间的...

    Excel表格公式大全,太强大.pdf

    根据出生日期自动计算周岁是Excel中的一种常用公式,能够帮助我们快速地根据出生日期计算周岁。例如,我们可以使用以下公式来计算周岁:=TRUNC((DAYS360(D3,NOW()))/360,0),这里D3表示出生日期的单元格。 10. 在...

    ACCESS日期时间函数[文].pdf

    这些函数使得数据库开发者和用户能够方便地进行日期计算、格式化以及转换。以下是对Access中一些关键日期时间函数的详细解释: 1. **CDate()**: 用于将文本格式的日期转换为日期类型。例如 `CDate("2003.08.04")` ...

    js+html实现周岁年龄计算器

    计算周岁年龄的核心逻辑在于比较输入的出生日期与当前日期的差异。如果出生年份等于当前年份,年龄为0;否则,计算年份之差`ageDiff`。如果年份之差大于0,进一步比较月份和日期。如果出生月等于当前月,再看日期之...

    excel常用函数公式及技巧搜集(常用的)

    这两个公式都可以用于提取身份证号码中的出生年月日,适用于15位或18位身份证号码。`MID`函数用于从字符串中截取指定位置的字符,`LEN`函数返回字符串长度,`TEXT`函数则用于将数值转换为文本格式。这里使用了条件...

    js+html实现周岁年龄计算器.docx

    - 通过比较当前日期与出生日期之间的差异来计算用户的周岁年龄。 - 最后,通过`alert()`函数弹窗显示计算结果。 #### 总结 本文详细介绍了一款使用JS与HTML实现的周岁年龄计算器的设计与实现过程。该工具不仅展示...

    Java中使用LocalDate根据日期来计算年龄的实现方法

    Java中使用LocalDate根据日期来计算年龄的实现方法 在 Java 中,计算年龄是一个常见的需求,传统上我们使用 `Date` 和 `Calendar` 类来实现,但是这些类的使用难度较高,且容易混淆。幸运的是,Java 8 中引入了 `...

    高中历史热门阅读中国人特有的虚岁和周岁究竟是怎么一回事?素材

    首先,周岁是国际上普遍采用的年龄计算方式,它以人的实际出生日期为基础,每年生日时增加一岁。例如,一个人在2023年1月1日出生,那么在2024年1月1日,他就满一岁,以此类推。周岁相对直观,与个人的生命历程紧密...

Global site tag (gtag.js) - Google Analytics