bet365体育平台欢迎您!
站内搜索:
当前位置: 首页 >> 审计文化 >> 审计科研 >> 正文
谈编码数据审计的分析技巧(审计署武汉办)
2018-01-25 08:00  

在审计数据分析实践中,审计人员常遇到诸多的编码数据字段,这些字段的编码往往内置了一套固有的规则,或者具备一定的规律,审计人员可以利用所了解的规则或规律,对这些字段进行分析,从而实现一定的分析目标。

身份证号码是编码数据的典型代表。众所周知,18位身份证号码包括行政区划代码(6位)、出生日期(8位)、序号(3位)和校验位(1位)组成,其中序号末位为单数的是男性,为双数的是女性,校验位由前17位经特定校验算法生成,取值范围为0-9和X。本文抛砖引玉,试以身份证号码的分析为例,给出编码数据的一些分析技巧。

分析一:15位旧身份证号码转换为18位新身份证号码

首先将旧号码左起第6位后添加“19”生成为17位数字,然后计算校验位,下面是其校验位计算的一种方法。

(1)17位数字本体码加权求和:S=Sum(Ai*Wi),

其中,i是17位数字小数点前(右起)的第i数位,如i=1代表个位;Ai表示相应位置上的数值;Wi表示相应位置上的加权因子,且Wi=mod(2i,11);

(2)对加权和除以11求模:Y=mod(S,11);

(3)得出校验位:当Y=0或1,校验位=1-Y;当Y=2,校验位=X;其他情况下,校验位=12-Y。

据以上算法,使用SQL实现旧身份证号码的转换函数:

create function [dbo].[f_CID15to18] (@sfz char(18))

returns char(18)

as

begin

declare @osfz varchar(18)

declare @i int,@ai int,@wi int,@sum int,@mod int,@result int

set @osfz = @sfz

set @sum = 0

IF len(@osfz) = 15 --若为15位旧身份证号码

begin

set @osfz = substring(@osfz,1,6) + '19' + substring(@osfz,7,9)

set @i = 1

while @i begin

set @ai = cast(substring(@osfz,18 - @i,1) as int)

set @wi = POWER (2, @i)% 11

set @sum = @sum + @ai * @wi

set @i = @i + 1

end

set @mod = @sum % 11

set @result = 12 - @mod

IF @result >= 10

IF @result = 10

RETURN @osfz + 'X'

ELSE

begin

set @result = @result - 11

RETURN @osfz + ltrim(@result)

end

ELSE

RETURN @osfz + ltrim(@result)

end

ELSE --若非旧身份证号码

RETURN @sfz

return @sfz

end

分析二:检查出不合理的身份证号码

检查不合理身份证号码(只判断号码的合理性,不判断真假,真假需经公安机关认证)的规则至少包括:1、不包括非法字符;2、15位或者18位;3、行政区划代码在国家统计局公布范围之内;4、(若为15位则在转化为18位后)左起第17位数字奇偶性与性别对应正确;5、出生年月在合理范围;6、(18位号码)校验位正确;

设身份证号码所在表中有字段姓名、性别、身份证号;行政区划代码表中有字段行政区划代码、行政区名,筛选不合理身份证号码记录所需SQL代码(预先创建不合理身份证号记录表,其建表代码略;需使用上述分析一中创建的函数):

DECLARE cur1 CURSOR FOR

select 身份证号,性别 from 身份证号码所在表

DECLARE @身份证号 varchar(50),@性别 varchar(10),@18位标准身份证号 varchar(50)

Open cur1

Fetch next from cur1 into @身份证号,@性别

While @@FETCH_STATUS =0

Begin

if(isnumeric(substring (@身份证号,1,17))=0

or (len(@身份证号)=18 and substring(@身份证号,18,1) not like '[0-9|X]'))

insert into 不合理身份证号记录表 values(@身份证号,@性别,'包括非法字符')

else(

set @18位标准身份证号=dbo.f_CID15to18(@身份证号)

if(LEN(@18位标准身份证号)18)

insert into 不合理身份证号记录表 values(@身份证号,@性别,'位数错误')

else if (substring(@18位标准身份证号,1,6) not in

(select 行政区划代码 from 行政区划代码表))

insert into 不合理身份证号记录表 values(@身份证号,@性别,'区划错误')

else if( (cast(substring(@18位标准身份证号,17,1) as int) %2 =1 and @性别'男')

or (cast(substring(@18位标准身份证号,17,1) as int) %2 =0 and @性别'女'))

insert into 不合理身份证号记录表 values(@身份证号,@性别,'性别校验错误')

else

Begin try

if(cast(substring(@18位标准身份证号,7,8) as DATE)

not between '1900-01-01' and GETDATE())

insert into 不合理身份证号记录表 values(@身份证号,@性别,'生日异常')

else if(dbo.f_CID15to18(substring(@18位标准身份证号,1,6)

+ substring(@18位标准身份证号,9,9))

@18位标准身份证号)

insert into 不合理身份证号记录表 values(@身份证号,@性别,'校验位错误')

End try

BEGIN Catch

insert into 不合理身份证号记录表 values(@身份证号,@性别,'生日错误')

End Catch

)

Fetch next from cur1 into @身份证号,@性别

End

Close cur1

Deallocate cur1

由上可以看出,对编码数据分析之前,关键在于先了解编码数据的编码规则,再根据有关规则开展分析。与对身份证号得编码规则分析类似的还有机构的组织机构代码(8位号码加1位校验位)、行业专属ID等编码数据,审计人员都可以根据需要编写相应SQL代码来加以应用,通过对编码数据的分析,从而找寻到打开深层数据分析之门的钥匙。(李晓亮)(本文内容仅为作者个人观点,不代表任何审计机关和本网站的观点,未经许可,不得转载)

上一条:土壤污染防治审计应重点关注的四个方面
下一条:浅谈国家审计如何助力法治中国建设(审计署哈尔滨办)
关闭窗口

 网站地图 

版权所有:bet365体育平台  青ICP备09000754    电话:0977-8227785
技术维护:海西州人民政府电子政务技术中心 信箱hxdzzw@haixi.gov.cn

青公网安备 63280002000102号