CREATE OR REPLACE FUNCTION fn_checkidcard (p_idcard IN VARCHAR2)
RETURN INT
IS
-------------------------------------
--
--身份证认证
--
--
------------------------------------
v_regstr VARCHAR2 (2000);
v_sum NUMBER;
v_mod NUMBER;
v_checkcode CHAR (11) := '10X98765432';
v_checkbit CHAR (1);
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
CASE LENGTHB (p_idcard)
WHEN 15
THEN -- 15位
IF INSTRB (v_areacode, SUBSTR (p_idcard, 1, 2) || ',') = 0
THEN
RETURN 0;
END IF;
IF MOD (TO_NUMBER (SUBSTRB (p_idcard, 6, 2)) + 1900, 400) = 0
OR ( MOD (TO_NUMBER (SUBSTRB (p_idcard, 6, 2)) + 1900, 100) <>
0
AND MOD (TO_NUMBER (SUBSTRB (p_idcard, 6, 2)) + 1900, 4) = 0
)
THEN -- 闰年
v_regstr :=
'^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$';
ELSE
v_regstr :=
'^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$';
END IF;
IF REGEXP_LIKE (p_idcard, v_regstr)
THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
WHEN 18
THEN -- 18位
IF INSTRB (v_areacode, SUBSTRB (p_idcard, 1, 2) || ',') = 0
THEN
RETURN 0;
END IF;
IF MOD (TO_NUMBER (SUBSTRB (p_idcard, 6, 4)), 400) = 0
OR ( MOD (TO_NUMBER (SUBSTRB (p_idcard, 6, 4)), 100) <> 0
AND MOD (TO_NUMBER (SUBSTRB (p_idcard, 6, 4)), 4) = 0
)
THEN -- 闰年
v_regstr :=
'^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$';
ELSE
v_regstr :=
'^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$';
END IF;
IF REGEXP_LIKE (p_idcard, v_regstr)
THEN
v_sum :=
( TO_NUMBER (SUBSTRB (p_idcard, 1, 1))
+ TO_NUMBER (SUBSTRB (p_idcard, 11, 1))
)
* 7
+ ( TO_NUMBER (SUBSTRB (p_idcard, 2, 1))
+ TO_NUMBER (SUBSTRB (p_idcard, 12, 1))
)
* 9
+ ( TO_NUMBER (SUBSTRB (p_idcard, 3, 1))
+ TO_NUMBER (SUBSTRB (p_idcard, 13, 1))
)
* 10
+ ( TO_NUMBER (SUBSTRB (p_idcard, 4, 1))
+ TO_NUMBER (SUBSTRB (p_idcard, 14, 1))
)
* 5
+ ( TO_NUMBER (SUBSTRB (p_idcard, 5, 1))
+ TO_NUMBER (SUBSTRB (p_idcard, 15, 1))
)
* 8
+ ( TO_NUMBER (SUBSTRB (p_idcard, 6, 1))
+ TO_NUMBER (SUBSTRB (p_idcard, 16, 1))
)
* 4
+ ( TO_NUMBER (SUBSTRB (p_idcard, 7, 1))
+ TO_NUMBER (SUBSTRB (p_idcard, 17, 1))
)
* 2
+ TO_NUMBER (SUBSTRB (p_idcard, 8, 1)) * 1
+ TO_NUMBER (SUBSTRB (p_idcard, 9, 1)) * 6
+ TO_NUMBER (SUBSTRB (p_idcard, 10, 1)) * 3;
v_mod := MOD (v_sum, 11);
v_checkbit := SUBSTRB (v_checkcode, v_mod + 1, 1);
IF v_checkbit = SUBSTRB (p_idcard, 18, 1)
THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
ELSE
RETURN 0;
END IF;
ELSE
RETURN 0; -- 身份证号码位数不对
END CASE;
EXCEPTION
WHEN OTHERS
THEN
RETURN 0;
END fn_checkidcard;
分享到:
相关推荐
该函数是支持Oracle环境下的对身份照进行校验的函数,它是按照身份照计算算法去校验的,能够精准的判断出身份照是否合法,通过返回值为1:表示为正确的身份证,返回值为0表示为错误的身份证
例如,你可以创建一个名为`资源文件名`的配置,设置`FAILED_LOGIN_ATTEMPTS`为10,`PASSWORD_LIFE_TIME`为180天,并且使用`PASSWORD_VERIFY_FUNCTION`指定我们即将创建的验证函数`verify_function_11G`。 ```sql ...
Oracle自定义脱敏函数是数据库管理中用于保护敏感数据的一种常见方法,尤其是在处理用户个人信息时。本文将深入解析Oracle自定义脱敏函数的实现细节,以确保在数据共享、备份或分析时不泄露关键信息。 首先,我们来...
在使用Windows远程桌面连接时,有时可能会遇到一个棘手的问题,即显示“发生身份验证错误,给函数提供的身份无效”。这个错误通常是由于安全更新或安全策略的要求,特别是涉及到凭据安全支持提供程序协议(CredSSP)...
然而,有时用户在尝试使用远程桌面时可能会遇到“身份验证错误,要求的函数不受支持”的问题,这通常与CredSSP(Credential Security Support Provider)协议的加密Oracle修正有关。本文将深入探讨这个问题的原因及...
Oracle身份证号码校验函数,可以将15位身份号码升为18位,检验出生年月等信息
Windows10远程桌面连接 报错: 出现身份验证错误。 要求的函数不受支持 这可能是由于CredSSP加密Oracle修正 解决方法: 添加注册表项,下载并运行以下注册表即可,各版本win10亲测可行。
远程桌面出现身份验证错误,要求的函数不受支持,网上百度都么有解决。windows10远程桌面——函数不受支持,这可能是由于 CredSSP 加密 Oracle.wrod文档
然而,有时候在尝试远程连接时,用户可能会遇到“身份验证错误”或提示“要求的函数不受支持”。这种情况通常与CredSSP(Credential Security Support Provider)协议有关,尤其是当系统应用了CredSSP加密Oracle修正...
标题中的“Win10远程连接,出现身份验证错误 远程计算机要求的函数不受支持 这可能是由于CredSSP加密Oracle修正”指的是在尝试使用Windows 10系统进行远程桌面连接(RDP,Remote Desktop Protocol)到另一台服务器,...
升级至win10 最新版本10.0.17134,远程桌面连接Window Server时报错信息如下: 出现身份验证错误,要求的函数不正确,这可能是由于CredSSP加密Oracle修正 只要合并这个注册表即可解决这个问题;
对于通过X.503证书进行身份验证的会话,该字段将返回证书上下文的HEX2格式。值得注意的是,`AUTHENTICATION_DATA`属性的返回值可以通过`SYS_CONTEXT`函数的长度参数进行修改,接受的最大值为4000。这是`USERENV`中唯...
在上述的部分内容中提到的"姓名照片姓名拼音身份证号",可能是在描述一种身份验证方法,通常在创建用户时,这些信息可能会被用作验证用户身份的依据。 性能优化是Oracle数据库管理的重要部分。通过分析SQL语句的...
Oracle数据库安全机制包括身份验证、权限管理、加密、访问控制、审计等。 4. Oracle数据库性能优化: Oracle数据库性能优化是指通过调整数据库参数、优化SQL语句、使用索引、调整存储结构等方法来提高数据库的处理...
10. **安全特性**:SDK集成了Oracle数据库的安全特性,如加密、身份验证、权限管理等,确保数据的安全性。 总的来说,"oracle-instantclient11.2-sdk-11.2.0.1.0-1.x86_64.zip"是为64位Linux环境提供的Oracle ...
此外,Oracle还提供了强大的安全管理机制,包括用户身份验证、权限和角色的管理、审计功能等,以确保只有授权用户能访问特定的数据资源。同时,Oracle数据库支持复杂的事务处理,保证了数据的一致性和并发控制。 在...
6. **身份验证机制**:Oracle数据库支持多种身份验证方式,如Simple Authentication、External Authentication(如LDAP)、Network Authentication(如Oracle Wallet)等。用户和角色权限管理也是数据库安全的关键...