tft每日頭條

 > 生活

 > 身份證自定義函數是什麼意思

身份證自定義函數是什麼意思

生活 更新时间:2025-03-14 04:20:31

各位朋友,你們好。今天和你們分享身份證信息的自定義函數。

身份證号碼在生活和工作中使用非常廣泛,因此在日常工作中經常會需要對身份證号碼進行分析和處理。今天給大家介紹對身份證信息處理的兩個自定義函數。

①、身份證号碼正誤檢查;

②、從身份證号中提取信息。


一、身份号碼正誤檢查

身份證号碼在很多地方都需要用到,如果我們在登記身份信息時,錄入了錯誤的身份證号碼,會給我們帶來很多不必要的麻煩。因此,在錄入身份的時候,最好能對身份證号正誤進行檢查,下面就給大家說說從哪些方面對身份證号進行檢查。(以下代碼中【ID】作為一個字符串變量,表示身份證号碼)

1、身份證号碼位數檢查

現在身份證号碼都是18位的,如果少錄入了一位,憑一雙肉眼還真不一定能及時發現。我們可以用以下代碼來檢查身份證号碼的位數:

If VBA.Len(ID) <> 18 Then CheckID = "身份證号碼位數錯誤" Exit Function End If

2、檢查非法字符

身份證号碼前17位均為數字,如果不小心錄入成了字母,會造成号碼錯誤,所以需要對其做判斷,代碼如下:

For a = 1 To 17 If VBA.IsNumeric(VBA.Mid(ID, a, 1)) = False Then CheckID = "身份證号有非法字符" Exit Function End If Next

3、省份地址代碼檢查

身份證号碼的前面六位是表示省市縣信息的地址代碼,這個代碼錯誤必然會導緻身份證号碼錯誤,所以需要檢查,代碼如下:

Dim SFCode '省份代碼存放數組 Set Dic = CreateObject("scripting.dictionary") SFCode = Array(11, 12, 13, 14, 15, 21, 22, 23, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 50, 51, 52, 53, 54, 61, 62, 63, 64, 65, 71, 81, 92, 91) For a = 1 To UBound(SFCode, 1) Dic(SFCode(a - 1)) = "" Next If Not Dic.exists(VBA.Left(ID, 2) * 1) Then CheckID = "區域代碼錯誤" Exit Function End If

由于無法單獨對市和縣地址代碼單獨核查,市和縣的地址信息必須與省份地址信息結合來做判斷,這樣就需要一份數據表,有條件的朋友可以收集一份完整、詳細的地址代碼信息表。

4、生日信息檢查

身份證号碼中有生日信息,這個生日信息,也可以作為檢查身份證号碼是否正确的一個參數,代碼如下:

DimDateCode$ DateCode = Application.Text(VBA.Mid(ID, 7, 8), "0000-00-00") If VBA.IsDate(DateCode) = False Then CheckID = "生日信息錯誤" Exit Function End If

5、身份校驗碼檢查

這個是身份證号碼檢查比較重要的一個參數,前面的位數、非法字符、生日等信息,細心點或許可以檢查處理,而身份證校驗碼,需要通過一定的計算過程才能算出,這個校驗碼也是15位身份證号碼升級18位身份證号碼的一個關鍵點。

對身份證校驗碼的判斷,需要先根據計算出校驗碼,然後再和所錄入的校驗碼對比看是否一緻。代碼如下:

Dim ArrayCode, ArrayMod, ArrayCoef '身份證驗算代碼存放數組 Dim ResultProd, ValidateCode$, ArrayID(16) As Integer ArrayCode = Array(1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2) ArrayMod = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10) ArrayCoef = Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2) For a = 1 To 17 ArrayID(a - 1) = VBA.Mid(ID, a, 1) Next ResultProd = Application.WorksheetFunction.SumProduct(ArrayCoef, ArrayID) ResultMod = ResultProd Mod 11 ValidateCode = Application.WorksheetFunction.Index(ArrayCode, ResultMod 1) If ValidateCode <> Right(ID, 1) Then CheckID = "身份證校驗碼錯誤" Else CheckID = "正确" End If

6、合并成一個自定義函數

最後,将以上的代碼全部合并起來,就可以得到一個完整的身份證号碼信息檢查的自定義函數;

身份證自定義函數是什麼意思(關于身份證信息的自定義函數)1

Function CheckID(ID As String) '檢驗身份證号碼是否正确的自定義函數 Dim SFCode '省份代碼存放數組 Dim ArrayCode, ArrayMod, ArrayCoef '身份證驗算代碼存放數組 Dim ResultProd, ValidateCode$, DateCode$, ArrayID(16) As Integer Dim Dic Dim a As Byte Set Dic = CreateObject("scripting.dictionary") SFCode = Array(11, 12, 13, 14, 15, 21, 22, 23, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 50, 51, 52, 53, 54, 61, 62, 63, 64, 65, 71, 81, 92, 91) ArrayCode = Array(1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2) ArrayMod = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10) ArrayCoef = Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2) '身份證位數檢查 If VBA.Len(ID) <> 18 Then CheckID = "身份證号碼位數錯誤" Exit Function End If '前17位隻能是數字 For a = 1 To 17 If VBA.IsNumeric(VBA.Mid(ID, a, 1)) = False Then CheckID = "身份證号有非法字符" Exit Function End If Next '省市代碼檢查 For a = 1 To UBound(SFCode, 1) Dic(SFCode(a - 1)) = "" Next If Not Dic.exists(VBA.Left(ID, 2) * 1) Then CheckID = "區域代碼錯誤" Exit Function End If '生日信息檢查 DateCode = Application.Text(VBA.Mid(ID, 7, 8), "0000-00-00") If VBA.IsDate(DateCode) = False Then CheckID = "生日信息錯誤" Exit Function End If '身份證校驗碼驗證 For a = 1 To 17 ArrayID(a - 1) = VBA.Mid(ID, a, 1) Next ResultProd = Application.WorksheetFunction.SumProduct(ArrayCoef, ArrayID) ResultMod = ResultProd Mod 11 ValidateCode = Application.WorksheetFunction.Index(ArrayCode, ResultMod 1) If ValidateCode <> Right(ID, 1) Then CheckID = "身份證校驗碼錯誤" Else CheckID = "正确" End If End Function


二、從身份證号碼中提取信息

身份證自定義函數是什麼意思(關于身份證信息的自定義函數)2

從身份證号碼中,我們可以提取生日、性别,然後可以利用生日計算出年齡

當然還可以利用生日信息計算星座、農曆生日。但是每年的星座日期都不是完全固定的,會出現一定概率的錯誤;對農曆生日的計算,還需要其他的自定義函數,超出了本次知識點的範圍了;省市縣地址代碼的信息,也和身份證上的地址信息不會完全一緻,除了計算籍貫,其他用處不太大。所以本次機僅考慮提取生日、性别、年齡這三個信息。

下面是自定義函數的代碼,這個自定義函數有兩個參數,一個是身份證号碼,一個是提取類型參數。提取類型為1,可以得到性别;提取類型為2,可以得到年齡;提取類型為3,可以得到年齡。

Public Function GetID(ID As String, LookupType As Byte) '從身份證号碼中提取信息的自定義函數 Dim a%, Tmp$ '申明變量 Application.Volatile Tmp = Trim(ID) Select Case LookupType Case 1 'Sex Dim SexValue As Byte SexValue = VBA.Mid(Tmp, 17, 1) If SexValue Mod 2 = 1 Then GetID = "男" Else GetID = "女" End If Case 2 'Birthday GetID = Application.Text(VBA.Mid(Tmp, 7, 8), "0000-00-00") Case 3 'Age Dim DateCode As String DateCode = Application.Text(VBA.Mid(Tmp, 7, 8), "0000-00-00") GetID = DateDiff("yyyy", DateCode, Now) End Select End Function

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved