延續基本版功能,此進階函數 [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 匯入資料庫後建立對應函數。