从本质上讲,工商营业执照号码和统一社会信用代码是两套完全不一样的编码规则,识别结果也仅有行政区划部分为两者共有,但因为这两种编码同时存在的原因,所以如果需要在系统中唯一标志一家企业时,还是可以通过工商营业执照号码或统一社会信用代码来进行识别。

工商营业执照号码长度按工商规定为15位,统一社会信用代码按国家规定是18位,你可以在此类库的验证基础上,通过其它网站(比如企查查)来进一步查验企业是否真实存在。

NumberValidators中,该部分验证相关的内容均在NumberValidators.BusinessRegistrationNos下,你可以在此处查看具体源代码。

IRegistrationNoValidator约定了要实现的验证的规范。

  1. /// <summary>
  2. /// 工商注册码/统一社会信用代码验证接口
  3. /// </summary>
  4. public interface IRegistrationNoValidator<out TResult> : IValidator<TResult>
  5. where TResult : RegistrationNoValidationResult, new()
  6. {
  7. /// <summary>
  8. /// 用于验证的行政区划字典数据
  9. /// </summary>
  10. IValidationDictionary<int, string> Dictionary { get; set; }
  11. /// <summary>
  12. /// 号码长度
  13. /// </summary>
  14. RegistrationNoLength RegistrationNoLength { get; }
  15. /// <summary>
  16. /// 验证号码是否正确
  17. /// </summary>
  18. /// <param name="code">待验证的工商注册码/统一社会信用代码</param>
  19. /// <param name="validLimit">行政区划验证限制,因为存在工商管理机构代码,所以默认为null</param>
  20. /// <returns></returns>
  21. TResult Validate(string code, AreaValidLimit? validLimit = null);
  22. }

验证结果定义如下:

  • RegistrationNoValidationResult 默认验证结果类
  • RegistrationNo15ValidationResult 工商营业执照特有的验证结果类
  • RegistrationNo18ValidationResult 统一社会信用代码特有的验证结果类

RegistrationNoValidationResult代码如下

  1. /// <summary>
  2. /// 注册码通用验证结果类
  3. /// </summary>
  4. public class RegistrationNoValidationResult : ValidationResult
  5. {
  6. /// <summary>
  7. /// 行政区划或工商行政管理机关编码
  8. /// </summary>
  9. public int AreaNumber { get; internal set; }
  10. /// <summary>
  11. /// 身份证颁发行政区域或工商行政管理机关(识别出Depth最深的区域),可通过FullName来获取完整的名称
  12. /// 注意此处有可能为null
  13. /// </summary>
  14. public Area RecognizableArea { get; internal set; }
  15. /// <summary>
  16. /// 号码长度
  17. /// </summary>
  18. public RegistrationNoLength RegistrationNoLength { get; internal set; }
  19. /// <summary>
  20. /// 校验码
  21. /// </summary>
  22. public char CheckBit { get; internal set; }
  23. }

RegistrationNo15ValidationResultRegistrationNoValidationResult的基础上额外包含了工商营业执照专有的识别信息,你可以通过该部分得知该企业是内资企业、外资企业还是个体户

  1. /// <summary>
  2. /// 工商行政管理市场主体注册号 专用验证结果类
  3. /// </summary>
  4. public class RegistrationNo15ValidationResult : RegistrationNoValidationResult
  5. {
  6. /// <summary>
  7. /// 顺序码
  8. /// </summary>
  9. public int SequenceNumber { get; internal set; }
  10. /// <summary>
  11. /// 企业类型
  12. /// </summary>
  13. public EnterpriseType EnterpriseType
  14. {
  15. get
  16. {
  17. var comp = this.SequenceNumber / 10000000;
  18. if (comp <= (int)EnterpriseType.Domestic)
  19. {
  20. return EnterpriseType.Domestic;
  21. }
  22. else if (comp <= (int)EnterpriseType.Foreign)
  23. {
  24. return EnterpriseType.Foreign;
  25. }
  26. else { return EnterpriseType.Individual; }
  27. }
  28. }
  29. }

RegistrationNo18ValidationResult则是在RegistrationNoValidationResult的基础上额外包含了社会统一信用代码的专有信息,你可以通过该部分信息得知其登记管理部门,以及其组织机构代码

  1. /// <summary>
  2. /// 法人和其他组织统一社会信用代码 专用验证结果类
  3. /// </summary>
  4. public class RegistrationNo18ValidationResult : RegistrationNoValidationResult
  5. {
  6. /// <summary>
  7. /// 登记管理部门代码标志
  8. /// </summary>
  9. public ManagementCode ManagementCode { get; internal set; }
  10. /// <summary>
  11. /// 登记管理部门下机构类别代码标志
  12. /// </summary>
  13. public ManagementKindCode ManagementKindCode { get; internal set; } = ManagementKindCode.NonSpecific;
  14. /// <summary>
  15. /// 组织机构代码,遵循GB/T 11714-1997
  16. /// </summary>
  17. public string OrganizationCode { get; internal set; }
  18. }

可根据IsValid来判断验证是否成功,如果验证失败,Errors 属性则包含了验证失败的原因,具体的错误原因列表如下

  1. /// <summary>
  2. /// 错误提示信息类
  3. /// </summary>
  4. internal class ErrorMessage
  5. {
  6. /// <summary>
  7. /// 字符串为空
  8. /// </summary>
  9. public const string Empty = "工商注册码/统一社会信用代码为空";
  10. /// <summary>
  11. /// 号码错误
  12. /// </summary>
  13. public const string Error = "错误的工商注册码/统一社会信用代码";
  14. /// <summary>
  15. /// 无效的登记管理部门代码
  16. /// </summary>
  17. public const string InvalidManagement = "无效的登记管理部门代码";
  18. /// <summary>
  19. /// 无效的登记管理部门机构类别代码
  20. /// </summary>
  21. public const string InvalidManagementKind = "无效的登记管理部门机构类别代码";
  22. /// <summary>
  23. /// 无效的组织机构代码
  24. /// </summary>
  25. public const string InvalidOrganizationCode = "无效的组织机构代码";
  26. /// <summary>
  27. /// 行政区划识别失败
  28. /// </summary>
  29. public const string InvalidArea = "工商管理机关或行政区划识别失败";
  30. /// <summary>
  31. /// 错误的校验码
  32. /// </summary>
  33. public const string InvalidCheckBit = "错误的校验码";
  34. /// <summary>
  35. /// 无效实现
  36. /// </summary>
  37. public const string InvalidImplement = "未能找到或无效的 {0} 位工商注册码/统一社会信用代码实现";
  38. /// <summary>
  39. /// 长度错误
  40. /// </summary>
  41. public const string LengthOutOfRange = "工商注册码/统一社会信用代码非 {0} 位";
  42. }

同其它验证类一致,RegistrationNoValidatorHelper可自动识别待识别号码究竟为工商营业执照号码还是社会统一信用代码,当然因为有可能待识别号码哪种号码都不是,所以最终识别结果可能为RegistrationNoValidationResultRegistrationNo15ValidationResultRegistrationNo18ValidationResult中的某一种。

最后是简单的使用示例

  1. Console.WriteLine("***工商注册码/统一社会信用代码***");
  2. string[] rnArr = { "110108000000016", "91320621MA1MRHG205" };
  3. foreach (var rn in rnArr)
  4. {
  5. var valid = RegistrationNoValidatorHelper.Validate(rn, validLimit: null);
  6. Console.WriteLine("{0}验证结果:{1} 长度{2} 行政区划名称({3}) 验证结果类型:{4}", rn, valid.IsValid, valid.RegistrationNoLength, valid.RecognizableArea.FullName, valid);
  7. }
  8. Console.WriteLine("随机的工商注册码:" + new RegistrationNo15Validator().GenerateRandomNumber());
  9. Console.WriteLine("随机的统一社会信用代码:" + new RegistrationNo18Validator().GenerateRandomNumber());

【NumberValidators】工商营业执照号码和统一社会信用代码验证的更多相关文章

  1. 精准准确的统一社会信用代码正则(js)

    参照标准: <GB_32100-2015_法人和其他组织统一社会信用代码编码规则.> 按照编码规则: 统一代码为18位,统一代码由十八位的数字或大写英文字母(不适用I.O.Z.S.V)组成 ...

  2. 统一社会信用代码+组织机构代码 校验 python

    转自: https://blog.csdn.net/warrah/article/details/69338912 https://blog.csdn.net/qq_37142340/article/ ...

  3. JS实现统一社会信用代码的效验(组织机构代码效验)

    参考原文https://blog.csdn.net/hdhxby/article/details/56015370 部分错误,修改整合了下 想查询数据的,请点击:统一信用代码查询地址 查看效验规则点击 ...

  4. 使用js对社会信用代码进行正则验证

    注:参考了该博客(https://blog.csdn.net/qq_37142340/article/details/80695187)进行了一些修改,本文验证使用在微信小程序上. 直接贴代码: va ...

  5. js验证营业执照号码是否合规

    需求:最近要做实名验证的功能,但是验证我们要验证严谨一点,参考了网上关于营业执照号码规则和一些大侠的代码的代码,总结一下. 营业执照号码规则:规则 代码: //方法一:function checkLi ...

  6. 企业工商营业执照副本模板PSD源文件素材下载

    企业工商营业执照副本PSD模板下载地址: http://www.qijieworld.com/thread-1911181-1-1.html 模板为psd格式内容可编辑修改,需使用 Photoshop ...

  7. 用 Prettier 统一团队的代码风格~

    使用 prettier 自動調整 JavaScript 樣式 GFM 格式说明 为什么你不能缺少Linter(以及代码美化工具) 使用 prettier 自動調整 JavaScript 樣式 Reac ...

  8. C# 获取社会统一信用代码

    时间不多,废话少说: 网络请求代码如下: using System; using System.Collections.Generic; using System.Linq; using System ...

  9. 【转】身份证号码校验与信息提取 - Java 代码

    转载地址:http://www.w3china.org/blog/more.asp?name=lhwork&id=19148 import java.util.regex.*;   /**   ...

随机推荐

  1. Subarray Product Less Than K LT713

    Your are given an array of positive integers nums. Count and print the number of (contiguous) subarr ...

  2. js 事件创建发布

    // 创建事件. var event = document.createEvent('Event'); // 初始化一个点击事件,可以冒泡,无法被取消 event.initEvent('click', ...

  3. samtools flagstat

    samtools flagstat命令简介: 统计输入文件的相关数据并将这些数据输出至屏幕显示.每一项统计数据都由两部分组成,分别是QC pass和QC failed,表示通过QC的reads数据量和 ...

  4. Windows AD域管理软件

  5. GO介绍,环境的配置和安装 简单使用

    1. 介绍与安装 Golang 是什么 Go 亦称为 Golang(按照 Rob Pike 说法,语言叫做 Go,Golang 只是官方网站的网址),是由谷歌开发的一个开源的编译型的静态语言. Gol ...

  6. centos 7 搭建pip源

    一.安装pip2pi工具: pip install pip2pi 或编译: git clone https://github.com/wolever/pip2pi cd pip2pi python s ...

  7. 关于DOM级别的一些问题,DOM0,DOM1,DOM2

    之前看书没太注意这个问题,直到我今天看书看到一个DOM0级,于是我就在群里问了下各个级别的意思区别.. 首先我们的确定标准了是没有DOM0级的.在平时阅读的时候可能会读到DOM0级(DOM Level ...

  8. Zookeeper C++编程实战之配置更新

    CZookeeperHelper:https://github.com/eyjian/libmooon/blob/master/include/mooon/net/zookeeper_helper.h ...

  9. C++调用ocx

    1.保证ocx已正常注册,可以使用 2.创建一个C++的命令行程序,在主程序#import "HZ_KevinTest.ocx" no_namespace 生成一次程序,debug ...

  10. xen 安静的角落

    为了装grid,要把domain0的iso文件挂载到pv guest上.搜索半天,解决如下: 1.把domain0上的物理设备挂接到pv guest上 xl block-attach centos01 ...