改进计算机“算法”解决廉租住房审计难题
成广普(审计署驻昆明特派办)
近年来,按照党中央国务院的要求,各地逐步加大了廉租住房建设的力度,为许多低收入困难群体解决了住房难的问题。但随着各级政府财政资金投入的增加和新的廉租住房不断建成投入使用,由于申请廉租住房人员(包括领取廉租补贴人员)数量增长较快,基层经办机构人员素质参差不齐加之工作量较大等原因,导致出现不符合城镇低保条件的廉租房人员和审核时申请人员身份证号码位数换算比对,以及因人为输入错误造成各种数据转换等多种问题。因此,在开展政府投资保障性住房审计过程中,如何运用计算机技术,克服上述难题成为审计人员应予关注的重点。笔者结合自身工作实践,尝试通过以下方法试图解决以下难题。
难题一:身份证位数不匹配带来的查询困难
目前,廉租住房保障人员在民政部门登记的身份证号码存在有15位和18位的情况,而当地房管局登记的户主信息同样是15位和18位身份证号码并存,并且还有单位购房证件号码和类似“军官证”这样非标准格式身份证号码。传统的比对方法是将15位身份证号码与15位身份证号码比对,18位身份证号码与18位身份证号码进行比对。一旦廉租住房住户登记的是15位身份证号码而房管局登记的户主信息是18位身份证号码或反之,就会造成遗漏的情况。
运用传统方法比对的SQL语句是:
select a.*,b.* into 租赁补贴待查人员 from 领取租赁补贴人员名单 a,房产信息 b where a.身份证号=b.身份证号 and a.姓名=b.名字
上述语句只能核实在不同部门登记的身份证号码位数一致的情况,而不能确定是否有遗漏情况。
解决思路一:将“领取租赁补贴人员名单”和“房产信息”数据库中的身份证号码先进行验证,剔除掉单位购房证件号码和类似“军官证”这样非标准格式身份证号码,然后将领取租赁补贴人员名单”和“房产信息”数据库中所有15位身份证号码转换为18位身份证号码再进行比对。
改进算法:第一步 剔除非标准身份证号码
select * into 房产信息表 from 房管局登记的户主信息表 where (len(身份证号)=15 or len(身份证号)=18)
select * into 领取租赁补贴人员名单 from 廉租补贴申请表 where (len(身份证号)=15 or len(身份证号)=18)
改进算法:第二步 将数据库中15位身份证号码转换成18位
if len(产权信息.证件号码) = 15
begin
UPDATE 产权信息 SET 产权信息.证件号码=
SUBSTRING(产权信息.证件号码,1,6)+'19'+SUBSTRING(产权信息.证件号码,7,9)+
SUBSTRING('10X98765432',
(
CAST(SUBSTRING(产权信息.证件号码, 1,1) AS INT)*7
+CAST(SUBSTRING(产权信息.证件号码, 2,1) AS INT)*9
+CAST(SUBSTRING(产权信息.证件号码, 3,1) AS INT)*10
+CAST(SUBSTRING(产权信息.证件号码, 4,1) AS INT)*5
+CAST(SUBSTRING(产权信息.证件号码, 5,1) AS INT)*8
+CAST(SUBSTRING(产权信息.证件号码, 6,1) AS INT)*4
+1*2
+9*1
+CAST(SUBSTRING(产权信息.证件号码, 7,1) AS INT)*6
+CAST(SUBSTRING(产权信息.证件号码, 8,1) AS INT)*3
+CAST(SUBSTRING(产权信息.证件号码, 9,1) AS INT)*7
+CAST(SUBSTRING(产权信息.证件号码,10,1) AS INT)*9
+CAST(SUBSTRING(产权信息.证件号码,11,1) AS INT)*10
+CAST(SUBSTRING(产权信息.证件号码,12,1) AS INT)*5
+CAST(SUBSTRING(产权信息.证件号码,13,1) AS INT)*8
+CAST(SUBSTRING(产权信息.证件号码,14,1) AS INT)*4
+CAST(SUBSTRING(产权信息.证件号码,15,1) AS INT)*2
)
% 11 + 1, 1)
WHERE LEN(产权信息.证件号码)=15 AND SUBSTRING(产权信息.证件号码,13,3) NOT IN ('999','998','997','996')
End
同理,对领取租赁补贴人员名单可以进行类似的身份证号码转换。采用这种方法的优点是处理好数据库后,可以使用传统方法的SQL语句a.身份证号=b.身份证号来进行操作,执行速度快;缺点是数据库必须完整,不能有空字段,并且对数据库身份证字段格式要求较高。该方法适用于多次查询的情况。
解决思路二:利用身份证号码编排的规律性,将身份证号码前6位先进行比对,如果相等,接着从第一个数据库中身份证号码第7位开始取9位数字和第二个数据库中身份证号码第9位开始取9位比对,再从第一个数据库中身份证号码第9位开始取9位和第二个数据库中身份证号码第7位开始取9位比对,如果上述一种情况符合我们就将它筛选出来再比对姓名。
改进算法:用15位或18位身份证号码的关键字段进行比对
select a.*,b.* into 租赁补贴待查人员 from 领取租赁补贴人员名单 a,房产信息 b where
(
a.身份证号=b.身份证号码
or (substring(a.身份证号,1,6)=substring(b.身份证号码,1,6) and
(substring(a.身份证号,7,9)=substring(b.身份证号码,9,9) or
substring(a.身份证号,9,9)=substring(b.身份证号码,7,9)))) and a.姓名=b.名字
采用第二种方法的优点是对数据库身份证字段格式要求不高,并且适合各种完整性不是很好的数据库;缺点是执行速度慢,对计算机硬件要求较高。笔者建议在专用服务器上进行操作,该方法相对适用于查询次数较少且时间性要求不强的情况。
难题二:数据关键字段非标准格式且无法转换
例如,某省明确要求纳入城市低保进而申请廉租住房或者租赁补贴的条件是必须购置商品房未满五年(且商品房面积小于人均12平米),由于各基层社区缺乏完善的规章制度和操作规范,加上民政部门等经办机构审核不严,被审计单位提供的城市低保人员或廉租住房人员名单日期数据格式存在问题,审计人员使用多种方法都无法将数据格式转换成标准日期格式。
如果被审计单位提供的数据格式正确,应使用的SQL语句为:
Select * from 城市低保人员情况表 where DATEDIFF ( year, 低保注册日期, 低保人员购房日期 )<5
但该算法只有在所有格式均正确的情况下才能使用,存在较大的局限性。
解决思路:此种情况下,审计人员需要另辟思路,将被审计单位日期转换成文本格式保存,然后利用SQL语句中的LEFT和MID函数,主要是首先用注册日期前四位减去购房日期的前4位数字即年份再乘以12得出月份,接着对注册日期和购房日期从第5位开始取两位即月份相减得到当年月份差。然后将两个月份相加合计得到小于60即为购房未满五年的情况。
改进算法:利用LEFT和MID函数代替DATEDIFF进行验证
Select * from 城市低保人员情况表 where (LEFT(低保注册日期,4)-LEFT(低保人员购房日期,4))*12+(MID(低保注册日期,5,2)-MID(低保人员购房日期,5,2))<60
难题三:内部控制高风险单位的数据真实性
例如,审计人员在某省延伸审计时,在某县住房和城乡建设局进行内部控制测评过程中发现该局管理混乱,内部控制属于高风险,工作人员存在利用职务便利或内部漏洞弄虚作假的可能。如果无法保证被审计单位提供的数据真实有效,将带来很大的审计风险。
解决思路:审计人员需要逆向思维,通过对已经享受了廉租补贴和实物配租人员进行反查,看这些人是否属于低保人员来验证被审计单位提供的数据真实性。若数据不真实,再去对民政部门核实相关低保人员。
解决算法:反查廉租补贴和实物配租人员是否属于低保人员
select * into 非低保人员待查人员 from 领取租赁补贴人员名单 where 身份证号码 not in (select 身份证号 from m县低保人员名单 where (len(身份证号)=15 or len(身份证号)=18))
通过改进过的两种SQL语句算法解决身份证位数不匹配带来的查询难题,笔者在对某省政府投资保障性住房审计中,在6000户廉租人员名单中查询出有400多户廉租住户拥有超标房产或商铺,查询效率提高30多倍。而对难题二的解决,审计中查处了762名城市低保人员不符合条件,其中有79名低保人员拥有商铺或车位,部分商铺价值达数百万元。运用解决最后一个难题的算法,审计查出多名已经享受了廉租补贴和实物配租人员不是低保人员。对审计查出的上述问题,该省相关部门领导高度重视,进行了认真整改,严肃处理了有关责任人员,在全省范围内开展清查活动,并健全完善了相关管理制度。(成广普)
【关闭】 【打印】 |