基于VBA的身份证号码信息处理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于VBA的身份证号码处理的设计与实现
摘要本文就利用MICROSOFT EXCEL配合VBA编程设计制作一个身份证处理系统做出了探讨。
VBA是集成在Excel中的编程语言,利用Excel自身强大的函数库,可以大大减轻编程的负担。
同时,经过试用,本程序大大减轻了劳动者的重复劳动,也无需EXCEL函数计算的专业要求,提高了工作效率,节约了时间。
关键字:身份证信息处理;EXCEL;VBA
This paper discusses the design and production of a ID card processing system based on EXCEL VBA with MICROSOFT programming. VBA is the programming language in Excel, using Excel's powerful function library, it can greatly reduce the burden of programming. At the same time, after the trial, these programs greatly reduce the workers' duplication of labor, there is no need to use the professional requirements of EXCEL function, improve the efficiency of the work and save time.
Key Word: ID information processing;Excel;VBA
1.概述
1.1引言
如今,很多部门要处理大量的信息,如学校的学工部门,经常需要统计男女生比例,年龄分布,地区分布等数据,如果没有计算机,那么这项工作无疑是庞大而复杂的。
俗话说:工欲善其事,必先利其器,有了计算机,再搭配简单易用的应用软件就能使这样的工作简单而高效。
所以,针对这样的问题,我们打算利用Microsoft Office Excel 2007软件配合内置的VBA编程语言来设计一套学生身份证号码信息处理软件,以此来解决繁琐而复杂的身份证信息处理和统计工作,解放劳动者的时间和精力。
1.2系统概述
根据我国规定,自2000年1月起,身份证号码由原先的15位统一升级到18位号码。
国家标准GB11643-1999《公民身份号码》中对我国身份证号码的结构做出了详细的规定:
1)号码的结构
公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。
排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,
三位数字顺序码和一位数字校验码。
2)地址码
表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
3)出生日期码
表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
4)顺序码表示在同一地址码所标识的区域范围内,对同年、同月、
同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女
性。
5)校验码
中华人民共和国行政区划代码:国家基础地理信息系统地形数据库境界和居民地要素执行国家标准《中华人民共和国行政区划代码》(GB 2260-1995),并根据需要扩充了部分代码。
根据GB11643-1999可对身份证号编码规则作如下总结:
●1-2 省级行政区代码
●3-4 地级行政区划分代码
●5-6 县区行政区分代码
●7-10 11-12 13-14 出生年、月、日
●15-17 顺序码,同一地区同年、同月、同日出生人的编号,其中第17
位奇数是男性,偶数是女性
●18 校验码,如果是0-9则用0-9表示,如果是10则用X(罗马数字10)
表示
了解了身份证号码编码的规则后便可对输入的号码做判断,以此来自动生成所需的数据。
1.2.1开发目的
为解决大量的学生身份证信息统计和分析,提高数据统计的效率,减轻工作人员的负担,特此开发身份证号码信息分析统计系统。
1.2.1开发环境
操作系统:Windows XP,Windows Vista,Windows 7
开发技术:Microsoft Office Excel 2007
1.3设计方案
该系统使用对象主要是学生部门或者需要统计学生信息的部门。
该系统主要实现对身份证信息的处理,包括:地区分类,年龄分布统计,出生日期的生成,性别判断,身份证号码准确性判断等功能。
运行后,能自动生成报表供使用及分析。
此外,保留未来扩展除身份证号码处理以外的其他功能。
2.可行性分析
2.1技术可行性
学院拥有的计算机软硬件完全可以胜任该系统的运行;此外,Microsoft Excel是最常用的办公软件之一,上手容易,使用它可解决很多较复杂的问题;另外,所需的VBA编程语言是Excel内置的,不仅简单易用,切与Excel 的兼容性不存在任何问题。
2.2实用角度
设计该系统,可解决大量的繁琐重复的信息统计问题,减轻工作人员的负担,提高工作的效率。
3.身份证号码信息处理系统的设计与实现
目前版本系统主要包括了性别、年龄、出生日期等模块,根据需要,还可加入地区判断、身份证校验等模块。
使用时按照提示对话框即可操作。
运
行完成后可参见下图:
用户可根据自身需要,选择单一的模块进行操作,运行过程中,可自行选择源数据区域及目标存储区域。
3.1性别自动判断模块
当用户运行该系统后,首先可将原始身份证数据插入到表格的任意一列,然后,而后点击生成性别按钮,系统会提示输入原始数据所在行,而后会提示输出到哪一行,运行期间,系统会自动判断有没有空行或不符合规范的身份证号码,并提示用户,最后会将统计信息输出到系统指定的区域,供用户调用。
实现该功能的代码如下:
Sub 身份证性别判断()
Dim i As Variant, sex As Variant, j As Long, k As Long, l As Variant, m As Variant, s As Integer, t As Integer, p As Integer
m = Application.InputBox("请输入身份证号所在列:", , "A")
If m = False Then
Exit Sub
Else
Cells(1, m).Select
End If
l = Application.InputBox("输出到哪一列?", , "E")
If l = False Then
Exit Sub
Else
Cells(1, l).Select
Cells(1, l).Value = "性别"
End If
j = InputBox("请输入起始单元格", , 2)
k = InputBox("请输入结束单元格", , 1000)
For i = j To k
If sex Mod 2 = 0 Then
Range(l & i).Value = "女"
Else
Range(l & i).Value = "男"
End If
If Range(m & i) = "" Then
Range(l & i) = "Null"
Range(l & i).Interior.ColorIndex = 12
MsgBox "注意!有空数据"
Else
If Len(Range(m & i)) = 18 Then
sex = Mid(Range(m & i), 17, 1)
ElseIf Len(Range(m & i)) = 15 Then
sex = Mid(Range(m & i), 15, 1)
Else
Range(l & i) = "Null"
Range(l & i).Interior.ColorIndex = 12
End If
End If
Next i
For i = j To k
If Range((l & i)) = "男" Then
s = s + 1
ElseIf Range((l & i)) = "女" Then
t = t + 1
ElseIf Range((l & i)) = "Null" Then
p = p + 1
End If
Next i
MsgBox ("共处理了" & k - j + 1 & "条数据!" & "其中男生" & s & "人;" & "女生" & t & "人;" & "空数据" & p & "条!")
Cells(12, "J").Value = "共处理了" & k - j + 1 & "条数据!" & "其中男生" & s & "人;" & "女生" & t & "人;" & "空数据" & p & "条!"
End Sub
3.2生日自动判断模块
当用户运行该系统后,首先可将原始身份证数据插入到表格的任意一列,然后,而后点击生成生日按钮,系统会提示输入原始数据所在行,而后会提示输出到哪一行,运行期间,系统会自动判断有没有空行或不符合规范的身份证号码,并提示用户,最后会将提示信息输出到系统指定区域。
实现该功能的代码如下:Sub 生日判断()
Dim i As Variant, birth As Variant, j As Long, k As Long, l As Variant, m As Variant, s As Integer, t As Integer, p As Integer
m = Application.InputBox("请输入身份证号所在列:", , "A")
If m = False Then
Exit Sub
Else
Cells(1, m).Select
End If
l = Application.InputBox("输出到哪一列?", , "F")
If l = False Then
Exit Sub
Else
Cells(1, l).Select
Cells(1, l).Value = "出生日期"
End If
j = InputBox("请输入起始单元格:", , 2)
k = InputBox("请输入结束单元格:", , 1000)
For i = j To k
If Range(m & i) = "" Then
Range(l & i) = "Null"
Range(l & i).Interior.ColorIndex = 12
MsgBox "注意!有空数据!"
Else
If Len(Range(m & i)) = 18 Then
birth = Mid(Range(m & i), 7, 8)
Range(l & i) = birth
ElseIf Len(Range(m & i)) = 15 Then
birth = Mid(Range(m & i), 7, 6)
Range(l & i) = birth
MsgBox "注意" & l & i & "单元格是15位身份证号!已获取生日信息,但只有6位,请补全!"
Else
Range(l & i) = "Null"
Range(l & i).Interior.ColorIndex = 12
End If
End If
Next i
For i = j To k
If Range((l & i)) = "Null" Then
p = p + 1
End If
Next i
MsgBox ("共处理了" & k - j + 1 & "条数据!" & "空数据" & p & "条!")
Cells(13, "J").Value = "共处理了" & k - j + 1 & "条数据!" & "空数据" & p & "条!" End Sub
3.3年龄判断模块
当用户运行该系统后,首先可将原始身份证数据插入到表格的任意一列,然后,而后点击生成生日按钮,系统会提示输入原始数据所在行,而后会提示输出到哪一行,最后输入当前年份后,系统便可运行,期间,系统会自动判断有没有空行或不符合规范的身份证号码,并提示用户,最后会将提示信息输出到系统指定区域。
实现该功能的代码如下:
Sub 年龄判断()
Dim i As Variant, age As Variant, j As Long, k As Long, l As Variant, m As Variant, p As Integer, y As Integer
m = Application.InputBox("请输入身份证号所在列:", , "A")
If m = False Then
Exit Sub
Else
Cells(1, m).Select
Cells(1, m).Value = "年龄"
End If
l = Application.InputBox("输出到哪一列?", , "G")
If l = False Then
Exit Sub
Else
Cells(1, l).Select
Cells(1, l).Value = "年龄"
End If
j = InputBox("请输入起始单元格:", , 2)
k = InputBox("请输入结束单元格:", , 1000)
y = InputBox("请输入当前年份:", , 2014)
For i = j To k
If Range(m & i) = "" Then
Range(l & i) = "Null"
Range(l & i).Interior.ColorIndex = 12
MsgBox "注意!有空数据!"
ElseIf Len(Range(m & i)) = 18 Then
age = Mid(Range(m & i), 7, 4)
Range(l & i).Value = y - age
ElseIf Len(Range(m & i)) = 15 Then
age = Mid(Range(m & i), 7, 2)
Range(l & i).Value = y - (age + 1900)
MsgBox "注意" & l & i & "单元格是15位身份证号!已获取年龄信息,但可能出错,请补全!"
Else
Range(l & i) = "Null"
Range(l & i).Interior.ColorIndex = 12
End If
Next i
For i = j To k
If Range((l & i)) = "Null" Then
p = p + 1
End If
Next i
MsgBox ("共处理了" & k - j + 1 & "条数据!" & "其中空数据" & p & "条!")
Cells(14, "J").Value = "共处理了" & k - j + 1 & "条数据!" & "其中空数据" & p & "条!"
End Sub
4.结束语
经过一段时间的设计和开发,身份证号码处理系统基本完成并经过了初步的测试,其功能基本达到设计初衷。
本系统方便快捷,简单易用,无需经过培训即可掌握用法,大大减轻了工作人员的劳动强度,提高了工作效率,同时灵活性较高,不仅可对现有系统做出调整,还可根据实际需求增加功能模块,扩展本系统的功能。
参考文献:国家标准GB11643-1999《公民身份号码》
Excel2007与VBA编程从入门到精通。