Oracle 校验统一社会信用代码函数SQL

  • 一、统一社会信用代码编码规则
    • 代码及说明
      • 第1位:登记管理部门代码
      • 第2位:机构类别代码
      • 第3位~第8位:登记管理机关行政区划码
      • 第9位~第17位:主体标识码(组织机构代码)
      • 第18位:校验码
  • 二、校验函数编码

一、统一社会信用代码编码规则

统一代码由十八位的阿拉伯数字或大写英文字母(不使用I、O、Z、S、V)组成,包括第1位登记管理
部门代码、第2位机构类别代码、第3位第8位登记管理机关行政区划码、第9位第17位主体标识
码(组织机构代码)、第18位校验码五个部分。

代码及说明

第1位:登记管理部门代码

登记管理部门代码使用阿拉伯数字或大写英文字母表示,登记管理部门代码标识如下表:

第2位:机构类别代码

机构类别代码使用阿拉伯数字表示,如下表:

第3位~第8位:登记管理机关行政区划码

登记管理机关行政区划码使用阿拉伯数字表示

第9位~第17位:主体标识码(组织机构代码)

主体标识码使用阿拉伯数字或大写英文字母表示

第18位:校验码

校验码使用阿拉伯数字或大写英文字母表示,校验码按下列公式计算:

MOD(n,m)———整数求余函数,例如:函数 MOD(31,31)的值为0;
i ———代码字符从左到右的位置序号;
Ci ———第i位置上的代码字符的值,'0123456789ABCDEFGHJKLMNPQRTUWXY’字符对应的值
对应数字0-30;
C18 ———校验码;
Wi ———第i位上的加权因子,加权因子见下表。

当 MOD函数值为1(即C18=30)时,校验码应用符号 Y 表示;当 MOD函数值为0(即C18=31)时,校验码用0表示。

二、校验函数编码

CREATE OR REPLACE FUNCTION FN_UNISCID_CHECK(in_uniscid VARCHAR2)RETURN VARCHAR2 IS/*用途:校验统一社会信用代码创建人:gangma2创建时间:2021-12-03*/--统一社会信用代码v_uniscid VARCHAR2(100);--统一社会信用代码长度v_length  NUMBER;--正则表达式v_regstr  VARCHAR2(2000);--ci*wi求和v_sum     NUMBER := 0;--检验位对应位置v_jy      VARCHAR2(1);/*统一社会信用代码字符串中字符对应V_CI位置数-1,如统一社会信用代码中91350100M0000100Y4,M对应的数值为instr( '0123456789ABCDEFGHJKLMNPQRTUWXY','M',1,1)-1*/v_ci CHAR(35) := '0123456789ABCDEFGHJKLMNPQRTUWXY';--定义数字型类型数组及变量TYPE v_number IS TABLE OF NUMBER;v_wi v_number := v_number(1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28);--区划省份代码v_areacode VARCHAR2(2000) := '11,12,13,14,15,21,22,23,31,32,33,34,35,36,37,41,42,43,44,45,46,50,51,52,53,54,61,62,63,64,65,71,81,82,91,';BEGIN--1、去掉'-'、空格、小写转换为大写字符v_uniscid := UPPER(RTRIM(LTRIM(REPLACE(in_uniscid, '-', ''))));--2、判断是否为空IF (v_uniscid IS NULL) THENBEGINRETURN '统一社会信用代码为空!';END;END IF;--3、判断长度v_length := LENGTHB(v_uniscid);IF v_length <> 18 THENRETURN '统一社会信用代码长度错误!';END IF;--4、省份代码IF INSTRB(v_areacode, SUBSTR(v_uniscid, 3, 2) || ',') = 0 THENRETURN '统一社会信用代码省份代码错误!';END IF;--5、验证格式:验证统一社会信用代码是由数字和大写字母组及非法字符v_regstr := '^[159Y][1239][1-9][0-9]{5}[0-9A-Z]{10}$';IF NOT REGEXP_LIKE(v_uniscid, v_regstr) THENRETURN '统一社会信用代码格式错误!';END IF;--6、v_uniscid的字符数值分别乘于该位的加权因子,然后求和,计算出校验码FOR i IN 1 .. (v_length - 1) LOOPv_sum := v_sum +(INSTR(v_ci, SUBSTR(v_uniscid, I, 1), 1, 1) - 1) * v_wi(i);END LOOP;/* 计算校验码在V_CI中位置*/v_jy := 31 - MOD(v_sum, 31);IF (v_jy = 31) THENv_jy := 0;END IF;IF (SUBSTR(v_ci, v_jy + 1, 1) <> SUBSTR(v_uniscid, -1)) THENRETURN '统一社会信用代码校验位错误';ELSERETURN '校验通过!';END IF;
EXCEPTIONWHEN OTHERS THENRETURN '校验程序异常!';
END FN_UNISCID_CHECK;

Oracle 校验统一社会信用代码函数相关推荐

  1. JS校验统一社会信用代码的真实性

    统一代码的构成 结构 代码及说明 统一社会信用代码来源字符与数值对应关系表 统一社会信用代码相应顺序上对应的加权因子 计算示例 js代码实现 统一社会信用代码:每一个法人和其他组织在全国范围内唯一的. ...

  2. java、正则表达式、php校验“统一社会信用代码”

    java import java.util.HashMap; import java.util.Map; /** * Desc: 社会信用代码证 检验 * Created  2016/5/18. */ ...

  3. 前端校验统一社会信用代码

    统一社会信用代码规则 由18位的阿拉伯数字或大写英文字母(不使用I.O.Z.S.V)组成: 第1位~第2位.第9位~第18位 [0-9A-HJ-NP-RT-UW-Y] 第3位~第8位,由阿拉伯数字表示 ...

  4. 身份证号与统一社会信用代码的校验

    身份证号与统一社会信用代码的表单校验 一.校验身份证号 <el-form ref="form" :model="form" :rules="ru ...

  5. Python实现统一社会信用代码校验(GB32100-2015)

    Python实现统一社会信用代码校验 统一社会信用代码国标校验 统一社会信用代码国标校验规则 示例说明 Python代码实现(仅实现GB- 32100-2015中的规则) 统一社会信用代码国标校验   ...

  6. JAVA生成统一社会信用代码和组织机构代码

    统一社会信用代码规则如下: 代码如下: 引入jar包下载:https://mvnrepository.com/artifact/cn.hutool/hutool-all/5.8.3 package c ...

  7. hive自定义函数实现组织机构代码、统一社会信用代码校验

    一.根据中华人民共和国国家标准全国组织机构代码(9位)编制规则实现规则校验 1.组织机构代码编码规则 1.1组织机构代码的组成 全国组织机构代码由八位数字(或大写拉丁字母)本体代码和一位数字(或大写拉 ...

  8. python结合正则表达式及校验码生成算法校验:电话号码、营业执照、组织机构代码证、税务登记证、统一社会信用代码证、非盈利性企业登记证号码的函数

    #!/usr/bin/env python3 import re from datetime import datetimedef check_phone(phone):'''三大运营商和虚拟运营商的 ...

  9. Python实现统一社会信用代码合法性校验

    Python实现统一社会信用代码合法性校验 1 统一代码的构成 1.1 结构 ​ 统一代码由十八位的阿拉伯数字或大写英文字母(不使用I.O.Z.S.V)组成,包括第1位登记管理部门代码.第2位机构类别 ...

  10. 身份证号码及统一社会信用代码校验

    /** * 身份证号码验证 * rule为form表单当前验证的filed对应的验证rule规则 * value为当前输入框返回值 * callback为回调函数,验证成功直接回调,验证失败回调函数返 ...

最新文章

  1. 【mybatis mapper XML】自增主键
  2. Python连续攀升,其他的脚本语言去哪了?
  3. hbase shell远程连接_hbase与phoenix集成
  4. pytorch之batch_size
  5. 生产者-消费者习题的运用
  6. VS间接寻址级别不同
  7. 上传文件到OOS服务器
  8. 不同PyTorch版本训练同一个代码结果差异巨大
  9. lhgdialog的弹出框操作
  10. 什么软件可以测试手长,心率检测专家-可以让你通过按压手指检测出心率的健康app...
  11. android 里面的颜色的RGB
  12. STM32之ADC的学习心得(std+HAL)
  13. LNMP架构的搭建——源码编译(PHP,nginx,Mysql)
  14. 【基础知识】~ FIFO
  15. Intel x87 FPU的使用基础
  16. LeetCode笔记:526. Beautiful Arrangement
  17. 小米11系列详细参数对比,11青春版/11/11Pro/11Ultra
  18. 1034 Head of a Gang(7ms,并查集版,比图的版本快得多,更省内存
  19. python实现因子分析及用于综合评分且配上碎石图(实例分析)
  20. Java小知识之海王多线程

热门文章

  1. Android安全论文汇集
  2. 妈妈见我来了的香港旅游局
  3. oracle现金流量表逻辑,分析现金流量表填列法的逻辑
  4. 计算机考在职研究生有用吗,报考计算机在职研究生有用吗?
  5. 2017年英语六级翻译
  6. cdrom是什么意思_开启电脑时出现CDROM是什么意思
  7. 证书链——区块链电子证书系统
  8. 手机通过页面调用摄相头或选择照片压缩后并显示
  9. 什么是M1、M2以及与资本市场的关系
  10. fortran - 用函数进行kind定义