企业注册号构造、入库实现原理

来源:互联网 发布:数据信号避雷器 编辑:程序博客网 时间:2024/05/06 04:39

1、背景:

为找到并尽可能小范围、精确的穷尽注册号,我做了哪些工作?

(1)、外部

通过Google、baidu、知乎大范围撒网找相关注册号的规律的资料。
核心结论:
1)前6位代表机关号,如:山东省有17地市,共175个机关号。
2)第7-14位为顺序号,第7位代表私营企业、有限责任公司、外资企业等,用1-9表示;
第8-14没有资料介绍规律。
3)第15位为校验码。

(2)、内部

1)通过程序实现了了校验码。
2)尝试通过穷举方式,穷举一个省的全部注册号。面临问题:已有核心结论,面太广,命中率非常低。
3)最终采用方法:从天眼查等网站找一定数量的数据(2万条)左右,穷举其第7-10位的可能性,
初步排查可能性远小于10000,这是提高命中率的极好的信号。
穷举方法:Shell脚本取第7-10位,然后排序sort、取唯一值uniq。
4)根据以上分析,构造某一个省内全部注册号数据。

3、一键构造某省数据、并完成入库流程

第一步:对机关号进行编码,并分别存储。

机关英文缩写存储到一个文件中,如: sd_register_name.txt机关号以地市为单位存储到不同的文件中,如:zb_register_codes.txt,共17个文件。比如:济南、济宁编号都是jn开头的,可以变化下一个为qn(确保不同即可)。
如:
淄博市 zb_zibo 370300
张店区 zb_zhangdian 370303
博山区 zb_boshan 370304

周村区 zb_zhoucun 370306

第二步:根据已有2万条记录,穷举的7-10位数据存储到数组中。

该部分内容数量不大,可以存储到数组中。后续如果需要扩展,直接向后填充即可。
程序求长度不要写死,直接sizeof(数组名)/sizeof(char*)求长度,便于动态扩展。

第三步:循环构造第11-14位。

穷举构造0000——9999共1万种可能性。

第四步:将前14位带入校验码程序验证,生成校验码。

第五步:构造拼接成15位程序。

4、程序具体实现步骤

Step1:逐行读sd_register_name.txt文件,外层共循环175次。(以山东省为例)
Step2:读到前两个字节为zb开头的,判定zb_register的数据库表是否存在,不存在,则创建之;存在,则跳过。
Step3:对应读zb_register_codes.txt文件,以便构造15位注册号;
Step4:构造完毕后,写入zb_register的数据库表中。
Step5:外层循环结束,整个写入完毕。

5、小结

采用技术:Linux平台 C++、MysqlC++、创建数据库表、读文件、构造数据、写数据库。
逻辑清晰后,其他水到渠成。

2016-9-20 pm23:02 思于家中床前

作者:铭毅天下
转载请标明出处,原文地址:
http://blog.csdn.net/laoyang360/article/details/52601607
如果感觉本文对您有帮助,请点击‘顶’支持一下,您的支持是我坚持写作最大的动力,谢谢!

0 0