php怎么生成6位不重复的字符串

本文操作环境:windows7系统、PHP7.1版、DELL G3电脑

php怎么生成6位不重复的字符串?

php生成6位的不重复的字符串(类似 UUID)

我们要考虑到:

不重复。

安全性。

【 不建议使用啥敏感的数据作为订单生成规则(例如:用户UID,订单自增ORDER_ID等),以为会暴露网站一些敏感信息】

不能使用大规模随机码。

why?

首先问你"编程语言中的随机能做到真随机吗?",我可以不自信的告诉你至少PHP做不到,所以可能导致第一个"不重复"原则发生

如果你的订单数量到达了1000w次,你每次生成订单编码时就得对比1000w条历史数据,一般在500w的时候,你得花时间在数据库优化上(简单处理:采用分区,建立索引,然而实际性要求高,可能需要在主数据库下操作,可想你有多痛,当然对于数据库实时读写还有其他的优化办法,在此不作介绍)。

防止并发

控制位数。

why?

  • 便于查询检索

  • 位数控制到 10-20位即可,当然网上将的是10~15缘由是利于输入,对于输入太长做好用户体验就好(新增复制订单按钮)

尽量具有业务意义(不是强制的,根据公司业务来)

【当你业务比较庞大时候,或者后期有大规模的扩充时,建议考虑下订单的生成意义,根据公司的业务做调整。举个最简单的例子:"一个卖化妆品的商城,你需要根据订单来源来(pc/移动)来生成报表,这时候可能需要"】

解决办法

// 类似生成 UUID ,不依赖外部流水号,完全靠时间戳和随机数生成订单号无法避免冲突,
// 所以必须引入外部的流水号生成机制。或使用数据库,或使用APC之类的缓存。
// 用APC之类的缓存存在一个问题,就是无法持久保持数据,服务器重启或者PHP宿主进程重启都会清空流水号计数器,
// 所以可以采取缓存+数据库结合的模式——如果缓存中有流水号计数器数据则读取并累加计数,如果缓存中没有流水号计数器从数据库中还原计数器。
// 计数器可以每隔一段时间重置一次。既然引入了自增流水号计数器,又会导致文章开头的“德国坦克问题”,
// 所以需要用skip32算法把流水号加密
// (https://GitHub.com/nlenepveu/Skip32)。
// 订单号 = 日期前缀 + 加密流水号
// Skip32 算法加密密钥
const ENCRYPTED_KEY = 'xxxxxxxxxxxx';
// 使用 Wincache 作为流水号计数器缓存
function getOrderSerialNumber() {
    $timestamp = time();
    $datePrefix = date('ymd', $timestamp);
// 如果流水号计数器数据不在缓存中,则尝试从数据库中恢复
    if (false === ($value = wincache_ucache_inc($datePrefix))) {
    wincache_lock($datePrefix);
// 从数据库中获取今日的订单数
    $counter = getNumberOfOrdersTodayFromDatabase($timestamp);
    $value = $counter + 1;
if (!wincache_ucache_add($datePrefix, $value, 60*60*24)) {
    $value = wincache_ucache_inc($datePrefix);
}
    wincache_unlock($datePrefix);
}
    return $datePrefix.str_pad(Skip32::encrypt($datePrefix.ENCRYPTED_KEY, $value), 10, '0', STR_PAD_LEFT);
}

简单方式:

当前时间戳md5加密,截取前6位

echo substr(md5(microtime(true)), 0, 6);

使用数据库bigint自增字段,转成62进制缩短长度

echo gmp_strval(gmp_init('9876543210', 10), 62);

--结束END--

本文标题: php怎么生成6位不重复的字符串

本文链接: https://www.lsjlt.com/news/496.html (转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢

  • php怎么生成6位不重复的字符串

    php生成6位不重复的字符串的方法:1、通过“substr(md5(microtime(true)), 0, 6);”截取前6位;2、使用数据库bigint自增字段,转成62进制缩短长度即可。
    阅读数:896 php 不重复
  • php怎么生成不重复颜色

    php生成不重复颜色的方法:1、创建一个PHP示例文件;2、通过“function randColor($num){...}”方法生成不重复颜色即可。
    阅读数:699 php
  • php字符串怎么去掉重复字符

    去重步骤:1、使用str_split()函数将字符串转为字符数组,语法“str_split(字符串,1)”;2、使用array_unique()函数去除字符数组中的重复值,语法“array_unique(字符数组)”;3、使用implode()函数将去重后的字符数组还原成字符串即可,语法“implode(去重后的字符数组)”。本教程操作环境:windows7系统、PHP8.1版、DELL G3电脑在
    阅读数:542 php php字符串
  • php怎么随机生成不重复字母

    php随机生成不重复字母的方法:1、创建一个PHP示例文件;2、通过for语句实现从0循环到5000,每循环一个数字,就去生成一个由字母组成的12位随机码;3、将数字不变顺序的随机替换到字母随机码中即可。
    阅读数:548 php
  • php怎么将字符串重复几次

    在PHP中,可以使用str_repeat()函数来将字符串重复指定的次数,并返回被重复的字符串;语法“str_repeat(string,repeat)”,参数“repeat”规定字符串将被重复的次数,其值必须大于等于0。
    阅读数:846 php 字符串重复
  • php怎么去除字符串前两位字符

    php去除字符串前两位字符的方法:1、使用substr()函数,语法“substr($str, 2)”;2、使用substr_replace()函数,语法“substr_replace($str, '', 0,2)”。
    阅读数:885 php 字符串
  • php字符串怎么删除后两位字符

    方法:1、使用substr(),语法“substr(字符串,0,-2)”;2、用substr_replace(),语法“substr_replace(字符串,"",-2,2)”;3、用rtrim(),语法“rtrim(字符串,“字符”)”。
  • php怎么判断字符串是否有重复

    判断步骤:1、利用str_split()把字符串转为字符数组,语法“str_split(字符串)”;2、利用array_unique()去除字符数组中重复的值,语法“array_unique(字符数组)”,会返回一个去重数组;3、使用count()获取字符数组和去重数组的长度;4、判断两个数组长度是否相等,语法“字符数组长度==去重数组长度”,如果相等,则字符串没有重复。本教程操作环境:window
    阅读数:471 php数组 php php字符串
  • php字符串怎么按位转为数组

    在php中,可使用str_split()函数将字符串按位转为数组,该函数可以把字符串分割到数组中,只需省略第二个参数,或值设置为“1”,即可分割字符串,将字符串拆分为一个个字符,并按位传入数组中;语法为“str_split("字符串")”。
    阅读数:115 php 字符串 数组
  • php怎么替换字符串倒数第二位的字符

    在php中,可以使用substr_replace()函数来替换字符串倒数第二位的字符;该函数可以从字符串指定位置开始替换指定个数的字符,只需要将第三个参数设置为“-2”,第四个参数设置为1即可替换倒数第二位字符,语法为“substr_replace(字符串,替换值,-2,1)”。本教程操作环境:windows7系统、PHP8.1版、DELL G3电脑php怎么替换字符串倒数第二位的字符?简单,利用s
    阅读数:116 php字符串 php
  • php怎么去掉字符串前两位字符

    php去掉字符串前两位字符的方法:1、使用substr()函数,语法“substr($str,2)”;2、使用substr_replace()函数,语法“substr_replace($str, '', 0,2)”。
    阅读数:831 php 字符串
  • php如何生成随机字符串

    在php中使用str_shuffle()和substr()函数随机生成字符串,具体方法如下:1.首先,新建一个php项目文件;2.php项目文件新建好后,在文件中定义生成字符串的范围;$str = 'aodnymcueifghw';3.字符
    阅读数:796 PHP 字符串
  • php怎么去除字符串最后一位字符

    两种去除方法:1、用substr()去除,只需要将该函数的第二个参数设置为0,第三个参数设置为(字符串长度-1)即可,语法“substr($str,0,strlen($str)-1)”。2、用str_split()将字符串转为字符数组,用array_pop()删除字符数组中的最后一个元素,再用implode()将字符数组转回字符串即可。本教程操作环境:windows7系统、PHP8.1版、DELL
    阅读数:447 php字符串 php
  • php怎么替换字符串的第三位字符

    在php中,可以使用substr_replace()函数来替换指定字符串的第三位字符,该函数可以从字符串指定位置开始,替换指定长度的字符;语法为“substr_replace(字符串, "替换值", 2,1)”。
    阅读数:308 php 字符串 替换字符
  • php怎么截取字符串从0到第N位的字符

    3种方法:1、用substr(),将第二个参数设为0,第三个参数设为N即可,语法“substr(字符串,0,N)”。2、用mb_substr(),将第二个参数设为0,第三个参数设为N即可,语法“mb_substr(字符串,0,N,字符编码)”。3、用substr_replace(),将第二个参数设为0,第三个参数设为N,语法“substr_replace(字符串,,N)”。本教程操作环境:windo
    阅读数:162 php php字符串
  • php怎么实现不重复编码

    php实现不重复编码的方法:1、创建一个PHP示例文件;2、使用PHP进行进制转换;3、通过数据库得到10进制的编号,并保证编号唯一即可。
    阅读数:226 php
  • php中如何按位截取字符串

    在php中使用substr()函数按位截取字符串的方法:substr()函数是用于根据条件返回字符串的一部分,substr()函数语法:substr(string,start,length);具体方法如下:substr()函数作用:php中
    阅读数:921 PHP vue
  • php如何将字符串按位截取

    在php中使用substr()函数按位截取字符串,具体方法如下:substr()函数作用:php中substr()函数的作用是根据条件返回字符串的一部分。substr()函数语法:substr(string,start,length)参数:
    阅读数:322 PHP 字符串
  • php怎么去掉字符串中的某串字符串

    php去掉字符串中的某串字符串的方法:1、创建一个PHP示例文件;2、使用str_replace函数或者preg_replace函数将指定字符串替换为空即可。
    阅读数:244 php
  • php怎么将字符串后两位替换为其他字符

    在php中,可以使用substr_replace()函数将字符串后两位替换为其他字符。该函数可以从字符串指定位置开始,将指定个数的字符替换为指定值;只需要将函数的第二个参数设置为指定替换值,第三参数设置为“-2”,第四个参数设置为2或者省略即可,语法“substr_replace(字符串,"替换值",-2,2)”或“substr_replace(字符串,"替换值",-2)”。本教程操作环境:wind
    阅读数:273 php php字符串