Office中國(guó)論壇/Access中國(guó)論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

返回列表 發(fā)新帖
查看: 3785|回復(fù): 4
打印 上一主題 下一主題

[模塊/函數(shù)] 身份證號(hào)碼校驗(yàn)判斷VBA函數(shù)-適應(yīng)excel及access

[復(fù)制鏈接]

點(diǎn)擊這里給我發(fā)消息

跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2015-11-12 09:39:01 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
先普及一下18位身份證號(hào)碼各位的含義:
1-2位省、自治區(qū)、直轄市代碼;
3-4位地級(jí)市、盟、自治州代碼;
5-6位縣、縣級(jí)市、區(qū)代碼;
7-14位出生年月日,比如19670401代表1967年4月1日;
15-17位為順序號(hào),其中17位(倒數(shù)第二位)男為單數(shù),女為雙數(shù);
18位為校驗(yàn)碼,0-9和X。作為尾號(hào)的校驗(yàn)碼,是由號(hào)碼編制單位按統(tǒng)一的公式計(jì)算出來(lái)的,計(jì)算的結(jié)果是0-10,如果某人的尾號(hào)是0-9,都不會(huì)出現(xiàn)X,但如果尾號(hào)是10,那么就得用X來(lái)代替,因?yàn)槿绻?0做尾號(hào),那么此人的身份證就變成了19位。X是羅馬數(shù)字的10,用X來(lái)代替10。

自己以前寫(xiě)的函數(shù)一下子找不到了,摘一下網(wǎng)絡(luò)上搜索到的函數(shù)
Function sfzjy(z)
    Dim b As Variant
    a = Len(z)
    b = Right(z, 1)
    If IsNumeric(b) Then
        b = b * 1
    Else: b = "X"
    End If
    C = Left(Right(z, 18), 1) * 1
    d = Left(Right(z, 17), 1) * 1
    e = Left(Right(z, 16), 1) * 1
    f = Left(Right(z, 15), 1) * 1
    g = Left(Right(z, 14), 1) * 1
    h = Left(Right(z, 13), 1) * 1
    i = Left(Right(z, 12), 1) * 1
    j = Left(Right(z, 11), 1) * 1
    k = Left(Right(z, 10), 1) * 1
    l = Left(Right(z, 9), 1) * 1
    m = Left(Right(z, 8), 1) * 1
    n = Left(Right(z, 7), 1) * 1
    o = Left(Right(z, 6), 1) * 1
    p = Left(Right(z, 5), 1) * 1
    q = Left(Right(z, 4), 1) * 1
    r = Left(Right(z, 3), 1) * 1
    s = Left(Right(z, 2), 1) * 1
    u = C * 7 + d * 9 + e * 10 + f * 5 + g * 8 + h * 4 + i * 2 + j * 1 + k * 6 + l * 3 + m * 7 + n * 9 + o * 10 + p * 5 + q * 8 + r * 4 + s * 2
    v = u Mod 11
     If a = 0 Then sfzjy = "空": GoTo 100
    If a = 15 Then sfzjy = "老號(hào),請(qǐng)認(rèn)真核對(duì)!": GoTo 100
        If a = 18 Then
        If v = 0 And b = 1 Then sfzjy = "正確": GoTo 100
        If v = 1 And b = 0 Then sfzjy = "正確": GoTo 100
        If v = 2 And b = "X" Then sfzjy = "正確": GoTo 100
        If v = 3 And b = 9 Then sfzjy = "正確": GoTo 100
        If v = 4 And b = 8 Then sfzjy = "正確": GoTo 100
        If v = 5 And b = 7 Then sfzjy = "正確": GoTo 100
        If v = 6 And b = 6 Then sfzjy = "正確": GoTo 100
        If v = 7 And b = 5 Then sfzjy = "正確": GoTo 100
        If v = 8 And b = 4 Then sfzjy = "正確": GoTo 100
        If v = 9 And b = 3 Then sfzjy = "正確": GoTo 100
        If v = 10 And b = 2 Then sfzjy = "正確": GoTo 100
        End If
        If (sfzjy <> "正確") And (sfzjy <> "老號(hào)") And (sfzjy <> "空") And (sfzjy <> "位數(shù)不對(duì)") Then sfzjy = "出錯(cuò)啦"
100:
End Function

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享分享 分享淘帖 訂閱訂閱
2#
發(fā)表于 2015-11-12 09:41:35 | 只看該作者
msgbox "贊'
3#
發(fā)表于 2015-11-12 10:09:01 | 只看該作者
有點(diǎn)復(fù)雜了!
期待個(gè)簡(jiǎn)單的.
4#
發(fā)表于 2015-11-12 12:09:02 | 只看該作者
風(fēng)中漫步 發(fā)表于 2015-11-12 10:09
有點(diǎn)復(fù)雜了!
期待個(gè)簡(jiǎn)單的.

紅塵的例子。
http://ctxi.cn/thread-92995-1-1.html
很久之前拿andymark的修改過(guò)的例子。
http://ctxi.cn/thread-109857-1-1.html

點(diǎn)擊這里給我發(fā)消息

5#
發(fā)表于 2015-11-15 12:09:14 | 只看該作者
高手啊
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2024-10-23 08:23 , Processed in 0.174717 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表