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 相关文章推荐
实用函数3
Nov 08 PHP
php中文字符截取防乱码
Mar 28 PHP
php生成缩略图的类代码
Oct 02 PHP
深入php常用函数的使用汇总
Jun 08 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
Jul 08 PHP
在Win7 中为php扩展配置Xcache
Oct 08 PHP
PHP随机生成信用卡卡号的方法
Mar 23 PHP
新浪微博OAuth认证和储存的主要过程详解
Mar 27 PHP
php使用标签替换的方式生成静态页面
May 21 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
Dec 31 PHP
CI配置多数据库访问的方法
Mar 28 PHP
php cookie用户登录的详解及实例代码
Jan 03 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代码
2006/12/06 PHP
PHP伪造referer实例代码
2008/09/20 PHP
PHP 删除一个目录及目录下的所有文件的函数代码
2010/05/26 PHP
php动态生成函数示例
2014/03/21 PHP
自己写的php中文截取函数mb_strlen和mb_substr
2015/02/09 PHP
php的4种常见运行方式
2015/03/20 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
JS input 数字验证代码
2009/07/30 Javascript
jQuery动态添加 input type=file的实现代码
2012/06/14 Javascript
javascript闭包的高级使用方法实例
2013/07/04 Javascript
JsRender for index循环索引用法详解
2014/10/31 Javascript
js中for in语句的用法讲解
2015/04/24 Javascript
jQuery 如何给Carousel插件添加新的功能
2016/04/18 Javascript
十大热门的JavaScript框架和库
2017/03/21 Javascript
JavaScript纯色二维码变成彩色二维码
2020/07/23 Javascript
JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析
2020/03/04 Javascript
js实现弹窗效果
2020/08/09 Javascript
element中table高度自适应的实现
2020/10/21 Javascript
[40:48]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第二局
2016/02/28 DOTA
[00:59]DOTA2背景故事第二期之四大基本法则
2020/07/07 DOTA
python3使用tkinter实现ui界面简单实例
2014/01/10 Python
简单介绍Python的Tornado框架中的协程异步实现原理
2015/04/23 Python
Python通过matplotlib绘制动画简单实例
2017/12/13 Python
python 用正则表达式筛选文本信息的实例
2018/06/05 Python
Python logging模块进行封装实现原理解析
2020/08/07 Python
html5 CSS过度-webkit-transition使用介绍
2013/07/02 HTML / CSS
浅谈利用缓存来优化HTML5 Canvas程序的性能
2015/05/12 HTML / CSS
预订旅游活动、景点和旅游:GetYourGuide
2019/09/29 全球购物
总经理驾驶员岗位职责
2013/12/04 职场文书
《花木兰》教学反思
2014/04/09 职场文书
我爱家乡演讲稿
2014/09/12 职场文书
代办社保委托书范文
2014/10/06 职场文书
国际贸易实务实训报告
2014/11/05 职场文书
党支部鉴定意见
2015/06/02 职场文书
房产遗嘱范本
2015/08/06 职场文书
索尼ICF-5900W收音机测评
2022/04/24 无线电