最新WPS办公软件学习教程_免费企业办公软件下载_金山WPS Office官网论坛

 找回密码
 
查看: 9064|回复: 39

[VBA/VBS教程] 身份证合法性校验程序

[复制链接]

6

主题

0

听众

88

积分

LV.2

Rank: 2

该用户从未签到

金币
8
威望
205
帖子
18
精华
0
发表于 2013-6-12 15:51 |显示全部楼层
分享到: 新浪微博 腾讯微博
抛砖引玉,欢迎探讨

  1. ; T/ T  t3 B0 Q
  2. Function isValidPersionID(sfz As String) As Boolean
    6 j( A/ u* b, _1 n0 G1 s2 i9 ~
  3.     Dim yy As Integer+ d4 y( ^, r4 ~) E
  4.     Dim mm As Integer' ]. f( Q, P1 B6 `
  5.     Dim dd As Integer2 F' L, X0 ?4 M% M' `
  6.     Dim i As Integer$ u# L4 z; V$ M; G* M4 S
  7.     Dim iPidLen As Integer
    5 D# d- Q6 H- ~6 {; v2 Z
  8.     Dim arPidWeight
    & e& Q6 [0 t. ]! m- A7 {4 _
  9.     Dim arPidCheck
    / B" [: X+ |; L" A: H; F/ E% Z+ T* Y5 ?
  10.     Dim lCheckSum As Long
    $ H2 R6 i6 u. L& H6 _+ `! O: f
  11.    
    3 `' g) ^  v6 u8 B' m+ O+ u3 z+ F
  12.     isValidPersionID = False
    " o3 f3 @, u# ^% H- @
  13.     iPidLen = Len(sfz)
    : y7 k; |$ o% k1 E; b0 x
  14.     If iPidLen <> 18 And iPidLen <> 15 Then Exit Function
    8 b" y8 n  I. l4 Q6 J
  15.     8 m4 b: _3 \0 l) S. G( F
  16.     arPidWeight = Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
    4 f' d+ ~' R& a; B
  17.     arPidCheck = Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2")5 a" ^. T# L) N! e) r; f. Y1 W- x% q
  18.     lCheckSum = 0% o5 V/ N, R5 Q( U. n( l1 w
  19.     For i = 1 To 15
    : ]) y6 a; v6 _2 T  n  h# _7 R
  20.         If InStr("0123456789", Mid(sfz, i, 1)) = 0 Then Exit Function  T1 X) D" @6 b. x0 p
  21.         lCheckSum = lCheckSum + CInt(Mid(sfz, i, 1)) * arPidWeight(i - 1). j* p" A' l, c0 C# k! q
  22.     Next i* O/ p% }; C) ]! N0 z; Y& y
  23.     If iPidLen = 15 Then
    7 n. t  }7 k) [) m# x6 h
  24.         yy = CInt(Mid(sfz, 7, 2)) + 1900
    0 B, f' r6 t- E- N, L8 h2 H* s
  25.         mm = CInt(Mid(sfz, 9, 2)); m+ U2 s- x- w- ^  D
  26.         dd = CInt(Mid(sfz, 11, 2))/ U7 v3 r0 D5 I1 a  O7 K, J( f: i
  27.     Else
    : O) U1 j2 E/ y( T
  28.         yy = CInt(Mid(sfz, 7, 4))
    * m& L2 w' q# j: H- A
  29.         mm = CInt(Mid(sfz, 11, 2))
    ( G+ V" b# W4 }9 Y/ N  Z& n
  30.         dd = CInt(Mid(sfz, 13, 2))
      n4 J# B; }) E7 Z5 ?; X% r  S
  31.         If InStr("0123456789", Mid(sfz, 16, 1)) = 0 Then Exit Function
    3 v+ Z* h. P( \  g2 m* L1 M
  32.         If InStr("0123456789", Mid(sfz, 17, 1)) = 0 Then Exit Function- w8 z# d! i8 z! z$ w/ K! i
  33.         If InStr("0123456789X", Mid(sfz, 18, 1)) = 0 Then Exit Function, f; z/ [, S0 ?3 d1 [- R: \
  34.         lCheckSum = lCheckSum + CInt(Mid(sfz, 16, 1)) * arPidWeight(15)3 k  E3 @0 D" e
  35.         lCheckSum = lCheckSum + CInt(Mid(sfz, 17, 1)) * arPidWeight(16)2 T6 u8 ^. w# J
  36.         lCheckSum = lCheckSum Mod 11
    0 U) s# {& N1 \" H' o+ g$ m
  37.         If Mid(sfz, 18, 1) <> arPidCheck(lCheckSum) Then Exit Function- j( p9 ~; m) ]
  38.     End If0 Y& R3 N  d9 p5 g6 ?- u. ]
  39.     If Not isValidDate(yy, mm, dd) Then Exit Function
    / O% C% t/ N' H& P+ k
  40.     isValidPersionID = True! [% V) n( S9 p( q! E& |' H( A/ y
  41. End Function
    3 T; S8 G: s+ s/ \; a
  42. Function isValidDate(yy As Integer, mm As Integer, dd As Integer) As Boolean9 N3 m; n' u# I; \( J% e& m
  43.     isValidDate = False
    5 G6 Y5 {4 I+ g/ [9 U5 R3 A. U- z
  44.     If yy > 2200 Or yy < 1900 Then Exit Function' u5 B  B! A; ?. e! l
  45.     If mm > 12 Or mm < 1 Then Exit Function% k' ]& Z. h6 Q3 `# H0 k
  46.     If dd < 1 Then Exit Function& `$ s2 `# b3 `! a- C9 x2 J! }
  47.     If (mm = 1 Or mm = 3 Or mm = 5 Or mm = 7 Or mm = 8 Or mm = 10 Or mm = 12) And dd > 31 Then Exit Function
    % \9 b' G  c; V, E  {& }# u) U  c
  48.     If (mm = 4 Or mm = 6 Or mm = 9 Or mm = 11) And dd > 30 Then Exit Function
    & v8 n5 Q- p8 p6 ~, f
  49.     If yy Mod 4 = 0 Then% B+ ]& z6 R4 T/ ?" y. J
  50.         If mm = 2 And dd > 29 Then Exit Function
    7 J0 k8 c0 w0 |7 o) S
  51.     Else; ]: g. D5 z2 v9 m( [2 C
  52.         If mm = 2 And dd > 28 Then Exit Function$ j4 d% l& g8 ^& i" X% i1 p( ~
  53.     End If
    ; V9 D1 f2 a( E  ~
  54.     isValidDate = True# A- \% ?8 h- M) Y! g
  55. End Function' J* x( W6 E) E
复制代码
已有 1 人评分威望 收起 理由
zhouyiran1@126.com + 12 赞一个!

总评分: 威望 + 12   查看全部评分

153

主题

110

听众

1万

积分

解答支持团长

老菜鸟

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

签到天数: 240 天

[LV.8]以坛为家I

金币
1254
威望
25965
帖子
10314
精华
1

活跃会员奖 解答支持团 测试体验团 乐于助人奖 优秀会员奖

发表于 2013-6-12 19:40 |显示全部楼层
赞一个!
回复

使用道具 举报

53

主题

60

听众

6715

积分

版主

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

签到天数: 126 天

[LV.7]常住居民III

金币
634
威望
13773
帖子
3973
精华
2

WPS粉丝团 技术分享团 乐于助人奖 技巧教程分享达人 优秀会员奖 活跃会员奖 测试体验团 版主勋章 勤奋版主奖 最佳教程奖 测试体验官 优秀模板奖

发表于 2013-6-12 19:48 |显示全部楼层
好东西{:soso_e179:}; Y& l6 ?4 Y7 `  ^1 ^' T
! x# G4 t! ~. R# N, X

8 D( ^3 m: |$ Z  Q9 A6 Q# g9 s% q- j& m

点击了解最新动态:【轩少】__实用教程索引(2015-9-6更新)
http://bbs.wps.cn/forum.php?mod= ... amp;fromuid=2404273
回复

使用道具 举报

3

主题

3

听众

7069

积分

测试体验团员

Rank: 14Rank: 14Rank: 14Rank: 14

签到天数: 1188 天

[LV.10]以坛为家III

金币
1639
威望
19669
帖子
1799
精华
0
发表于 2013-6-12 21:11 |显示全部楼层
顶一个先!赞呀!
回复

使用道具 举报

0

主题

0

听众

343

积分

LV.4

Rank: 4

该用户从未签到

金币
10
威望
885
帖子
55
精华
0
发表于 2013-6-21 19:05 |显示全部楼层
( `1 ^3 N4 A. }
来学习教程!支持!
回复

使用道具 举报

9

主题

22

听众

1万

积分

测试体验团员

Rank: 14Rank: 14Rank: 14Rank: 14

签到天数: 1204 天

[LV.10]以坛为家III

金币
2176
威望
26691
帖子
6217
精华
0

优秀会员奖 活跃会员奖 乐于助人奖 测试体验团

发表于 2013-6-22 11:02 |显示全部楼层
顶一个            
回复

使用道具 举报

0

主题

0

听众

7

积分

LV.1

Rank: 1

签到天数: 2 天

[LV.1]初来乍到

金币
2
威望
7
帖子
0
精华
0
发表于 2014-8-2 19:54 |显示全部楼层
怎么复制的时候全是一堆杂七杂八的字符呀。
回复

使用道具 举报

0

主题

0

听众

5

积分

LV.1

Rank: 1

该用户从未签到

金币
0
威望
10
帖子
2
精华
0
发表于 2014-8-9 12:41 |显示全部楼层
zhouyiran1@126.com 发表于 2013-6-12 19:40 2 Z- {7 k. U# J3 E- M+ o, G
赞一个!

! f( p( g4 s& z+ U6 t6 n2 ^' D* f7 S, j8 a
签与不签,我还是会签到
回复

使用道具 举报

6

主题

0

听众

66

积分

LV.2

Rank: 2

签到天数: 1 天

[LV.1]初来乍到

金币
2
威望
155
帖子
34
精华
0
发表于 2014-8-9 19:32 |显示全部楼层
我用c写了一个。。
回复

使用道具 举报

442

主题

45

听众

1万

积分

超级版主

我心飞翔

Rank: 22Rank: 22Rank: 22Rank: 22Rank: 22Rank: 22

签到天数: 174 天

[LV.7]常住居民III

金币
780
威望
29551
帖子
17324
精华
18

优秀模板奖 WPS粉丝团 最佳管理奖 勤奋版主奖 最佳教程奖 宣传大使奖 乐于助人奖 用户体验奖 活跃会员奖 技巧教程分享达人 超级版主勋章 优秀会员奖

发表于 2014-8-9 21:31 |显示全部楼层
现在15位身份证已经全部失效了,所以只要考虑18位身份证就可以了
回复

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 更多账号登录:

快速回帖:

fastpost

WPS论坛更新日志|WPS Office官方论坛 ( 粤公网安备 44049102496073号 粤ICP备13015957号-1   

GMT+8, 2018-1-19 19:25

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部