返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php怎么生成6位不重复的字符串
  • 915
分享到

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

php不重复 2018-11-08 09:11:47 915人浏览
摘要

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

本文操作环境: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进制缩短长度即可。 ...
    915
    2023-03-24
    php 不重复
  • php字符串怎么去掉重复字符
    去重步骤:1、使用str_split()函数将字符串转为字符数组,语法“str_split(字符串,1)”;2、使用array_unique()函数去除字符数组中的重复值,语法“array_unique(字符数组)”;3、使用implode()函数将去重后的字符数组还原成字符串即可,语法“implode(去重后的字符数组)”。本教程操作环境:windows7系统、PHP8.1版、DELL G3电脑在 ...
    588
    2023-03-24
    php php字符串
  • php怎么随机生成不重复字母
    php随机生成不重复字母的方法:1、创建一个PHP示例文件;2、通过for语句实现从0循环到5000,每循环一个数字,就去生成一个由字母组成的12位随机码;3、将数字不变顺序的随机替换到字母随机码中即可。 ...
    588
    2023-03-24
    php
  • php怎么将字符串重复几次
    在PHP中,可以使用str_repeat()函数来将字符串重复指定的次数,并返回被重复的字符串;语法“str_repeat(string,repeat)”,参数“repeat”规定字符串将被重复的次数,其值必须大于等于0。 ...
    852
    2023-03-24
    php 字符串重复
  • php怎么去除字符串前两位字符
    php去除字符串前两位字符的方法:1、使用substr()函数,语法“substr($str, 2)”;2、使用substr_replace()函数,语法“substr_replace($str, '', 0,2)”。 ...
    906
    2023-03-24
    php 字符串
  • php字符串怎么删除后两位字符
    方法:1、使用substr(),语法“substr(字符串,0,-2)”;2、用substr_replace(),语法“substr_replace(字符串,"",-2,2)”;3、用rtrim(),语法“rtrim(字符串,“字符”)”。 ...
    342
    2023-03-24
    php 字符串 删除后几位字符
  • php怎么判断字符串是否有重复
    判断步骤:1、利用str_split()把字符串转为字符数组,语法“str_split(字符串)”;2、利用array_unique()去除字符数组中重复的值,语法“array_unique(字符数组)”,会返回一个去重数组;3、使用count()获取字符数组和去重数组的长度;4、判断两个数组长度是否相等,语法“字符数组长度==去重数组长度”,如果相等,则字符串没有重复。本教程操作环境:window ...
    475
    2023-03-24
    php数组 php php字符串
  • php生成随机字符串
    ?phpfunction random_string( $length = 20 ) {//字符集,可任意添加你需要的字符$chars = ABCD;$password = ;for ( $i ...
    790
    2023-03-24
    字符串 php
  • php字符串怎么按位转为数组
    在php中,可使用str_split()函数将字符串按位转为数组,该函数可以把字符串分割到数组中,只需省略第二个参数,或值设置为“1”,即可分割字符串,将字符串拆分为一个个字符,并按位传入数组中;语法为“str_split("字符串")”。 ...
    134
    2023-03-24
    php 字符串 数组
  • php怎么替换字符串倒数第二位的字符
    在php中,可以使用substr_replace()函数来替换字符串倒数第二位的字符;该函数可以从字符串指定位置开始替换指定个数的字符,只需要将第三个参数设置为“-2”,第四个参数设置为1即可替换倒数第二位字符,语法为“substr_replace(字符串,替换值,-2,1)”。本教程操作环境:windows7系统、PHP8.1版、DELL G3电脑php怎么替换字符串倒数第二位的字符?简单,利用s ...
    123
    2023-03-24
    php字符串 php
  • php怎么去掉字符串前两位字符
    php去掉字符串前两位字符的方法:1、使用substr()函数,语法“substr($str,2)”;2、使用substr_replace()函数,语法“substr_replace($str, '', 0,2)”。 ...
    835
    2023-03-24
    php 字符串
  • java如何实现获取字符串中第一个出现不重复的字符
    比如:输入name输出n,输入teeter输出r,输入namename输出null具体实现代码如下:import java.util.Scanner;public class Main{public static void main(String[] ar ...
    191
    2023-03-24
    java 获取 字符串 不重复 字符 第一个
  • php如何生成随机字符串
    在php中使用str_shuffle()和substr()函数随机生成字符串,具体方法如下:1.首先,新建一个php项目文件;2.php项目文件新建好后,在文件中定义生成字符串的范围;$str = 'aodnymcueifghw';3.字符 ...
    814
    2023-03-24
    PHP 字符串
  • 生成8位随机不重复的数字编号的方法
    生成随机不重复的数字编号在某些情况下也会用到,本文以生成8位随机不重复的数字编号为例与大家分享下具体的实现过程,感兴趣的朋友可以参考下 ...
    886
    2023-03-24
    8位随机 数字编号
  • php怎么实现不重复编码
    php实现不重复编码的方法:1、创建一个PHP示例文件;2、使用PHP进行进制转换;3、通过数据库得到10进制的编号,并保证编号唯一即可。 ...
    226
    2023-03-24
    php
  • php怎么去除字符串最后一位字符
    两种去除方法:1、用substr()去除,只需要将该函数的第二个参数设置为0,第三个参数设置为(字符串长度-1)即可,语法“substr($str,0,strlen($str)-1)”。2、用str_split()将字符串转为字符数组,用array_pop()删除字符数组中的最后一个元素,再用implode()将字符数组转回字符串即可。本教程操作环境:windows7系统、PHP8.1版、DELL ...
    449
    2023-03-24
    php字符串 php
  • php怎么替换字符串的第三位字符
    在php中,可以使用substr_replace()函数来替换指定字符串的第三位字符,该函数可以从字符串指定位置开始,替换指定长度的字符;语法为“substr_replace(字符串, "替换值", 2,1)”。 ...
    347
    2023-03-24
    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 ...
    192
    2023-03-24
    php php字符串
  • php如何将字符串按位截取
    在php中使用substr()函数按位截取字符串,具体方法如下:substr()函数作用:php中substr()函数的作用是根据条件返回字符串的一部分。substr()函数语法:substr(string,start,length)参数: ...
    323
    2023-03-24
    PHP 字符串
  • php中如何按位截取字符串
    在php中使用substr()函数按位截取字符串的方法:substr()函数是用于根据条件返回字符串的一部分,substr()函数语法:substr(string,start,length);具体方法如下:substr()函数作用:php中 ...
    946
    2023-03-24
    PHP vue
热门问答
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作