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脚本数据库功能详解(上)
Oct 09 PHP
php $_ENV为空的原因分析
Jun 01 PHP
PHP 简单日历实现代码
Oct 28 PHP
PHP daddslashes 使用方法介绍
Oct 26 PHP
thinkPHP模板中for循环与switch语句用法示例
Nov 30 PHP
PHP使用redis消息队列发布微博的方法示例
Jun 22 PHP
实例讲解YII2中多表关联的使用方法
Jul 21 PHP
PHP Laravel中的Trait使用方法
Jan 20 PHP
PHP __call()方法实现委托示例
May 20 PHP
php解决约瑟夫环算法实例分析
Sep 30 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
May 12 PHP
用Laravel轻松处理千万级数据的方法实现
Dec 25 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
PHP学习之PHP表达式
2006/10/09 PHP
PHP程序61条面向对象分析设计的经验小结
2008/11/12 PHP
php实现约瑟夫问题的方法小结
2015/03/23 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
2016/03/21 PHP
深入理解PHP原理之执行周期分析
2016/06/01 PHP
PHP PDO操作MySQL基础教程
2017/06/05 PHP
阿里云的WindowsServer2016上部署php+apache
2018/07/17 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
2019/08/03 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
PHP Trait功能与用法实例分析
2020/06/03 PHP
js实现兼容IE6与IE7的DIV高度
2010/05/13 Javascript
获取中文字符串的实际长度代码
2014/06/05 Javascript
JavaScript中具名函数的多种调用方式总结
2014/11/08 Javascript
pace.js页面加载进度条插件
2015/09/29 Javascript
javascript函数的四种调用模式
2017/01/08 Javascript
BootStrap中的Fontawesome 图标
2017/05/25 Javascript
vue+swiper实现侧滑菜单效果
2017/12/28 Javascript
jQuery 实现左右两侧菜单添加、移除功能
2018/01/02 jQuery
js中的this的指向问题详解
2019/08/29 Javascript
python+django快速实现文件上传
2016/10/24 Python
python+selenium开发环境搭建图文教程
2017/08/11 Python
Python网络爬虫中的同步与异步示例详解
2018/02/03 Python
Python实现OpenCV的安装与使用示例
2018/03/30 Python
Python比较2个时间大小的实现方法
2018/04/10 Python
Anaconda之conda常用命令介绍(安装、更新、删除)
2019/10/06 Python
CSS实现雨滴动画效果的实例代码
2019/10/08 HTML / CSS
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
英国领先的高街书籍专家:Waterstones
2018/02/01 全球购物
可打印的优惠券、杂货和优惠券代码:Coupons.com
2018/06/12 全球购物
税务专业毕业生自荐信
2013/11/10 职场文书
三峡大坝导游词
2015/01/31 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
2015年“我们的节日·中秋节”活动总结
2015/07/30 职场文书
小学中队委竞选稿
2015/11/20 职场文书
2019各种保证书范文
2019/06/24 职场文书
Python带你从浅入深探究Tuple(基础篇)
2021/05/15 Python