PHP生成随机码的思路与方法实例探索


Posted in PHP onApril 11, 2019

本文实例讲述了PHP生成随机码的思路与方法。分享给大家供大家参考,具体如下:

背景

今天因为无聊,小伙伴让写一个生成5位随机码的函数,要求:可包含数字、字母大小写,代码尽量短。

解题思路

(1) . 第一思路

都是印象中匹配ASCII码进行随机读取的实现方法,此处可提供一个方法作为参考:

function get_rand_ascii($pw_length = 5){
  $randpwd = '';
  for ($i = 0; $i < $pw_length; $i++) {
    $randpwd .= chr(mt_rand(33, 99));
  }
  return $randpwd;
}

(2) . 第二思路

1.定义随机数组,内含能够使用的所有字符

function getRandomString($length=5) {
  //可任意添加需要的字符
  $chars = array(
    "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
    "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
    "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
    "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
    "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2",
    "3", "4", "5", "6", "7", "8", "9"
  );
  $charsLen = count ( $chars ) - 1;
  shuffle ( $chars ); // 将数组打乱
  $output = "";
  for($i = 0; $i < $length; $i ++) {
    $output .= $chars [mt_rand ( 0, $charsLen )];
  }
  return $output;
}

提示:此类的代码,建议去除可能引起歧义的字符,如:1、I、l、0、o、O、9、q.

缺点:5个字符没有重复

2.比较上述 1 中的数组形式,设计字符串形式参考如下:

function get_pass( $length = 8 ) {
  // 密码字符集,可任意添加你需要的字符
  $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_ []{}<>~`+=,.;:/?|';
  $password = '';
  for ( $i = 0; $i < $length; $i++ ) {
    // 这里提供两种字符获取方式
    // 第一种是使用 substr 截取$chars中的任意一位字符;
    // 第二种是取字符数组 $chars 的任意元素
    // $password .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    $password .= $chars[ mt_rand(0, strlen($chars) - 1) ];
  }
  return $password;
}

(3) . 第三思路

发现的新思路,可使用加密算法进行获取

public function getRand(){
  $rand = rand(10000,100000);
  $str = substr(base64_encode($rand), 0, 5);
  return $str;
}

提示:md5()函数只有数字和小写的字母

发现:base64_encode()可以满足要求

拓展延伸

针对于PHP设计,一般的随机码可用于验证码、分享码的生成,着重注意位数的限制,必要情况下,保证该随机码的唯一性.

password_hash 的使用(PHP>5.5)

可用于用户的密码加密存储,不过有一点需注意:如果数据库迁移,对于java或.net语言将难以适用.

$password = 'password1232456';//前端 获取的原始密码
//数据库存放的 使用BCRYPT算法加密的密码
//此处仅为测试,实际应用时应从数据表中查询获得
//$db_pass = '$2y$10$2vJJC.rb/swAUnTfc9B94.l/ix75kiZHvOZFpu0Dd8uzp07YWlj4q';
$db_pass = password_hash($password, PASSWORD_BCRYPT);
if (password_verify($password , $db_pass)){
  echo "密码匹配";
}else{
  echo "密码错误";
}

参考文章:

PHP 相关文章推荐
php is_file()和is_dir()用于遍历目录时用法注意事项
Mar 02 PHP
php Smarty date_format [格式化时间日期]
Mar 15 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
Aug 31 PHP
php中选择什么接口(mysql、mysqli)访问mysql
Feb 06 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
Jul 22 PHP
PHP中大于2038年时间戳的问题处理方案
Mar 03 PHP
php两种无限分类方法实例
Apr 21 PHP
PHP生成图片缩略图类示例
Jan 12 PHP
简单谈谈 php 文件锁
Feb 19 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
May 29 PHP
PHP操作XML中XPath的应用示例
Jul 04 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
Dec 13 PHP
PHP实现网站应用微信登录功能详解
Apr 11 #PHP
PHP之认识(二)关于Traits的用法详解
Apr 11 #PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
Apr 10 #PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
Apr 10 #PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
Apr 10 #PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
Apr 10 #PHP
ThinkPHP框架实现的微信支付接口开发完整示例
Apr 10 #PHP
You might like
强烈声明: 不要使用(include/require)_once
2013/06/06 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
javaScript - 如何引入js代码
2021/03/09 Javascript
网页自动刷新,不产生嗒嗒声的一个解决方法
2007/03/27 Javascript
js中设置元素class的三种方法小结
2011/08/28 Javascript
兼容FF和IE的动态table示例自写
2013/10/21 Javascript
js 异步操作回调函数如何控制执行顺序
2013/12/24 Javascript
js确认删除对话框适用于a标签及submit
2014/07/10 Javascript
详解jQuery中的元素的属性和相关操作
2015/08/14 Javascript
让你一句话理解闭包(简单易懂)
2016/06/03 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
vue + elementUI实现省市县三级联动的方法示例
2019/10/29 Javascript
谈谈我在vue-cli3中用预渲染遇到的坑
2020/04/22 Javascript
微信小程序实现身份证取景框拍摄
2020/09/09 Javascript
浅谈vant组件Picker 选择器选单选问题
2020/11/04 Javascript
python使用urlparse分析网址中域名的方法
2015/04/15 Python
Python 多线程的实例详解
2017/09/07 Python
python使用正则表达式的search()函数实现指定位置搜索功能
2017/11/10 Python
用Python实现大文本文件切割的方法
2019/01/12 Python
Python 调用 Windows API COM 新法
2019/08/22 Python
Python中 Global和Nonlocal的用法详解
2020/01/20 Python
如何定义TensorFlow输入节点
2020/01/23 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
2020/02/07 Python
python 如何调用远程接口
2020/09/11 Python
python代码实现图书管理系统
2020/11/30 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
2020/12/03 Python
HTML5 语义化结构化规范化
2008/10/17 HTML / CSS
基于HTML5 的人脸识别活体认证的实现方法
2016/06/22 HTML / CSS
Woolworth官网:澳洲第一大超市
2017/06/25 全球购物
西海岸男士和男童服装:Johnnie-O
2018/03/15 全球购物
高三体育教学反思
2014/01/29 职场文书
投标担保书范文
2014/04/02 职场文书
行政复议决定书
2015/06/24 职场文书
爱国主题班会教案
2015/08/14 职场文书
vue使用Google Recaptcha验证的实现示例
2021/08/23 Vue.js