在 Oracle 中生成随机密码

php中文网
发布: 2016-06-07 17:17:41
原创
1376人浏览过

在 Oracle 中生成随机密码,在我的应用中,我需要在用户首次注册时为该帐号生成一个随机密码。所生成的密码必须满足一定的要求,这

在我的应用中,我需要在用户首次注册时为该帐号生成一个随机密码。所生成的密码必须满足一定的要求,这些要求由系统管理员进行配置。

我们提供了下面几个对密码的要求规则,这些规则可组合使用:

1- 要求大写字母 UPPERCASE            =====> 缩写 [U]
2- 要求小写字母 LOWERCASE           =====> 缩写 [L]
3- 要求使用数字 NUMBER                  =====> 缩写 [N]
4- 可以是任意字符 any character    =====> 缩写 [A]

5- 必须有非字母和数字的字符 NON-ALPHANUMERIC character =====> 缩写 [S]

因此我想通过创建一个动态函数 "RANDOM_PASSWORD" 来根据要求返回随机的密码。

系统管理员只需要传递所需密码的规则就会返回对应的随机密码。

例如要求如下:

首字符必须大写             ======> U
第二个字符必须小写       ======> L
第三个字符必须是数字    ======>N
第四个字符随意             ======>A
第五个字符必须是非字母和数字  ======>S
第六个字符必须是数字    ======> N   

那么你可以使用 "ULNASN" 参数来获取随机密码。

所生成的密码程度跟传递的参数长度是一致的。在我们这个例子中生成的密码长度是 6。

你可以使用下面方法来调用这个函数:

RANDOM_PASSWORD('ULNASN');

壁纸样机神器
壁纸样机神器

免费壁纸样机生成

壁纸样机神器 0
查看详情 壁纸样机神器

该函数的源码如下:

CREATE OR REPLACE FUNCTION RANDOM_PASSWORD (IN_TEMPLATE IN VARCHAR2) 
 RETURN VARCHAR2 IS 
 LC$CRITERIA VARCHAR2(1); 
 LC$PASSWORD VARCHAR2(500); 
 LC$PATTERN VARCHAR2(500); 
 LN$INDX NUMBER; 
 BEGIN 
 /*1-Character should be UPPERCASE     =====> Abbreviation [U] 
 2- Character should be LOWERCASE      =====> Abbreviation [L] 
 3- Character should be NUMBER         =====> Abbreviation [N] 
 4- Character should be any character     =====> Abbreviation [A] 
 5- Character should be NON-ALPHANUMERIC character =====> Abbreviation [S]*/ 
   LC$CRITERIA := ''; 
   LC$PASSWORD := ''; 
   FOR I IN 1.. LENGTH(IN_TEMPLATE) LOOP 
     LC$CRITERIA := SUBSTR(IN_TEMPLATE,I,1); 
     IF UPPER(LC$CRITERIA ) = 'U' THEN  
       LC$PATTERN := q'[ABCDEFGHIJKLMNOPQRSTUVWXYZ]'; 
     ELSIF UPPER(LC$CRITERIA ) = 'L' THEN  
        LC$PATTERN := q'[abcdefghijklmnopqrstuvwxyz]'; 
     ELSIF UPPER(LC$CRITERIA ) = 'N' THEN  
        LC$PATTERN := q'[0123456789]'; 
     ELSIF UPPER(LC$CRITERIA ) = 'A' THEN  
        LC$PATTERN := q'[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]'; 
     ELSIF UPPER(LC$CRITERIA ) = 'S' THEN  
        LC$PATTERN := q'[~!@#$%^&*()_+-}{|":;?.,[]/\]'; 
     ELSE 
        LC$PATTERN := q'[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789]'; 
     END IF; 
     LN$INDX := TRUNC( LENGTH(LC$PATTERN) * DBMS_RANDOM.VALUE) + 1; 
     LC$PASSWORD := LC$PASSWORD || SUBSTR(LC$PATTERN,LN$INDX,1); 
   END LOOP; 
   RETURN LC$PASSWORD; 
END RANDOM_PASSWORD; 

使用方法:

SELECT RANDOM_PASSWORD ('ULNASN') FROM DUAL;

在我这里将返回的随机密码是:Pq51{0

当然,,你运行的结果可能不一样,因为这是随机的。

英文原文,OSCHINA原创翻译

linux

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号