首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

進階身分證驗證函數:解析性別、生日、戶籍地與歷代區碼

     編輯:關於SqlServer

延續基本版功能,此進階函數 [Helper].[IDCard] 新增回傳性別、出生日期、戶籍地代碼、地區中文名稱、完整行政區名稱,並支援查詢歷代戶籍區碼變更歷史(如縣市升格、合併),資料來源參考內部 [Helper].[RegionCodeFullName] 函數與 [Private].[RegionCode] 表。

函數回傳欄位

  • Input:原始輸入
  • IDCard:標準化 18 碼
  • Sex:性別(0=女、1=男,第 17 碼奇偶判斷)
  • Birthday:出生日期 (YYYYMMDD)
  • Region:戶籍地代碼 (前 6 碼)
  • RegionName:地區中文名稱(如「寬城區」)
  • RegionFullName:完整行政區名稱(如「長春市寬城區」)
  • Valid:驗證結果

核心邏輯差異

-- 取得性別:第 17 碼奇偶
SET @Sex = SUBSTRING(@tmpCard, 17, 1) % 2;

-- 取得戶籍代碼
SET @Region = SUBSTRING(@tmpCard, 1, 6);

-- 查詢最新版區碼資料
SELECT @RegionName = [Name], @RegionFullName = [Full]
FROM [Helper].[RegionCodeFullName](DEFAULT, @Region);

-- 若查無資料,回溯第一代身分證區碼資料
IF @RegionName IS NULL BEGIN
    DECLARE @FirstDate VARCHAR(8);
    SELECT @FirstDate = MIN(FirstDate) FROM [Private].[RegionCode];
    SELECT @RegionName = [Name], @RegionFullName = [Full]
    FROM [Helper].[RegionCodeFullName](@FirstDate, @Region);
END

測試範例

SELECT * FROM [LzmTWWorks].[Helper].[IDCard] ('110116200808080010');
/* 結果:
Input                IDCard               Sex Birthday Region RegionName RegionFullName       Valid
-------------------- -------------------- --- -------- ------ ---------- -------------------- -----
110116200808080010   110116200808080014   1   20080808 110116 寬城區     長春市寬城區         0
*/

應用場景:會員註冊即時驗證、批次資料清洗、戶籍地統計分析、歷史資料修正。若專案無內部區碼資料表,可改用公開的戶政區碼 CSV 匯入資料庫後建立對應函數。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved