首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

C# / JavaScript 身份證號碼解析:出生日期、年齡、性別與工齡計算實用代碼

     編輯:ASP.NET 基礎

適用場景

OA 系統、人資管理、會員註冊等需從身分證字號快速推導基本資料的場合。

一、身分證字號解析(18 位大陸標準)

// 取得輸入的身分證字號
var idNumber = $("#UUserCard").val();

// 1. 出生日期:第 7-14 碼 (YYYYMMDD)
var birthDate = idNumber.substring(6, 10) + "-" + 
                idNumber.substring(10, 12) + "-" + 
                idNumber.substring(12, 14);
// 格式:1990-05-15

// 2. 性別:第 17 碼,奇數=男,偶數=女
var genderCode = parseInt(idNumber.substr(16, 1));
var gender = (genderCode % 2 === 1) ? "男" : "女";

// 3. 年齡計算
var today = new Date();
var birthYear = parseInt(idNumber.substring(6, 10));
var birthMonth = parseInt(idNumber.substring(10, 12));
var birthDay = parseInt(idNumber.substring(12, 14));

var age = today.getFullYear() - birthYear - 1;
// 判斷今年生日是否已過
if (birthMonth < today.getMonth() + 1 || 
    (birthMonth === today.getMonth() + 1 && birthDay <= today.getDate())) {
    age++;
}
// age 即為計算出的年齡

二、入職日期計算工齡

// 取得入職日期字串 (格式:YYYY-MM-DD)
var hireDateStr = $("#UToTime").val();
var parts = hireDateStr.split("-");
// 注意:JavaScript 月份 0-11,需減 1
var hireDate = new Date(parts[0], parts[1] - 1, parts[2]);

var now = new Date();
var diffMs = now.getTime() - hireDate.getTime();
// 轉換為 Date 物件取得年月日差異
var diffDate = new Date(diffMs);

// 結果格式:X年Y月Z日
var workAge = (diffDate.getFullYear() - 1970) + "年" + 
              diffDate.getMonth() + "月" + 
              diffDate.getDate() + "日";

C# 後端對應實作

public static class IdCardHelper
{
    /// <summary> 解析 18 位身分證字號 </summary>
    public static (DateTime BirthDate, string Gender, int Age) Parse(string idNumber)
    {
        if (string.IsNullOrWhiteSpace(idNumber) || idNumber.Length != 18)
            throw new ArgumentException("身分證字號格式錯誤");

        var birthDate = DateTime.ParseExact(idNumber.Substring(6, 8), "yyyyMMdd", null);
        var gender = (int.Parse(idNumber[16].ToString()) % 2 == 1) ? "男" : "女";
        
        var today = DateTime.Today;
        var age = today.Year - birthDate.Year;
        if (birthDate > today.AddYears(-age)) age--;
        
        return (birthDate, gender, age);
    }

    /// <summary> 計算工齡 </summary>
    public static string CalculateWorkAge(DateTime hireDate)
    {
        var now = DateTime.Now;
        int years = now.Year - hireDate.Year;
        int months = now.Month - hireDate.Month;
        int days = now.Day - hireDate.Day;

        if (days < 0) { months--; days += DateTime.DaysInMonth(now.Year, now.Month - 1); }
        if (months < 0) { years--; months += 12; }

        return $"{years}年{months}月{days}日";
    }
}

注意事項

  • 前端驗證僅供即時回饋,**後端必須重新驗證**
  • 身分證字號規則隨地區不同(台灣/大陸/港澳),本文針對大陸 18 位標準
  • 年齡/工齡計算以「當前日期」為基準,跨時區系統建議統一使用 UTC

完整前端整合範例

<input type="text" id="UUserCard" placeholder="身分證字號" onblur="parseIdCard()" />
<input type="text" id="UBirthDate" readonly />
<input type="text" id="UGender" readonly />
<input type="text" id="UAge" readonly />

<script>
function parseIdCard() {
    var id = $("#UUserCard").val();
    if (!/^\d{17}[\dXx]$/.test(id)) return;
    
    $("#UBirthDate").val(id.substring(6,10)+"-"+id.substring(10,12)+"-"+id.substring(12,14));
    $("#UGender").val(parseInt(id[16])%2===1 ? "男" : "女");
    
    var today=new Date(), by=parseInt(id.substring(6,10)), bm=parseInt(id.substring(10,12)), bd=parseInt(id.substring(12,14));
    var age=today.getFullYear()-by-1;
    if(bm<today.getMonth()+1||(bm===today.getMonth()+1&&bd<=today.getDate())) age++;
    $("#UAge").val(age);
}
</script>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved