Php 如何在每次程序运行时生成唯一值。

Php 如何在每次程序运行时生成唯一值。,php,Php,我必须生成20个独特的六字符长的促销代码。我按照代码生成它们,然后生成csv。现在,如果再次运行我的程序,它将不会生成已经生成的“升级代码”。我怎样才能防止它。我没有使用任何数据库进行存储。这是我试图生成促销代码的代码 $conn = new Promotion(); $coupons= $conn->generateCodes(); class Promotion{ public function randomString(){ $uc = ['Q',

我必须生成20个独特的六字符长的促销代码。我按照代码生成它们,然后生成csv。现在,如果再次运行我的程序,它将不会生成已经生成的“升级代码”。我怎样才能防止它。我没有使用任何数据库进行存储。这是我试图生成促销代码的代码

$conn = new Promotion();
$coupons= $conn->generateCodes();


class Promotion{
    public function randomString(){
        $uc    = ['Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Z', 'X', 'C', 'V', 'B', 'N', 'M'];
        $lc    = ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'z', 'x', 'c', 'v', 'b', 'n', 'm'];
        $num      = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

        $char  = [];
        $promotionCode = '';

        $char = array_merge($char, $num, $uc, $lc);

        for ($i = 0; $i < 6; $i++) {
            $promotionCode .= $char[mt_rand(0, count($char) - 1)];
        }
        return $promotionCode;

    }

    public function generateCodes(){
        $promoCodes = [];
        for ($i = 0; $i < 250; $i++) {
            $temp = $this->randomString();
            $promoCodes[] = $temp;
        }
        return $promoCodes;
    }
}
$conn=新促销();
$coups=$conn->generateCodes();
班级晋升{
公共函数randomString(){
$uc=['Q','W','E','R','T','Y','U','I','O','P','A','S','D','F','G','H','J','K','L','Z','X','C','V','B','N','M'];
$lc=['q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'];
$num=[0,1,2,3,4,5,6,7,8,9];
$char=[];
$promotionCode='';
$char=数组合并($char、$num、$uc、$lc);
对于($i=0;$i<6;$i++){
$promotionCode.=$char[mt_rand(0,count$char)-1];
}
返回$promotionCode;
}
公共函数生成代码(){
$promoCodes=[];
对于($i=0;$i<250;$i++){
$temp=$this->randomString();
$promoCodes[]=$temp;
}
返回$promoCodes;
}
}

您必须存储已经生成的代码,并且在生成新代码时确保它不是您已经使用过的代码,或者您必须将方案更改为基于当前时间,以便以后生成的代码不可能再次生成相同的代码


但是如果你的随机字符串足够长且足够随机,那么再次生成相同的字符串的可能性就变得非常小,所以你必须考虑这两种方法是否值得付出努力。

< p>你要么必须存储你已经生成的代码,在生成新代码时,请确保它不是您已经使用过的代码,否则您必须将方案更改为基于当前时间,以使以后生成的代码不可能再次生成相同的代码


但是如果你的随机字符串足够长且足够随机,那么再次生成相同的字符串的可能性就变得非常小,所以你必须考虑这两种方法是否值得付出努力。六个字符似乎不足以完成这个答案的最后一部分。我说长度为62的字母表和六个字符,有62^6个可能的代码,对吗?那就是56800235584个可能性。所以我想说这取决于你要生成多少代码。这真的取决于你有多倒霉:)同意,六个字符似乎不足以完成这个答案的最后一部分。我说的长度为62的字母表和六个字符,有62^6个可能的代码,对吗?那就是56800235584个可能性。所以我想说,这取决于你要生成多少代码。这真的取决于你有多倒霉:)如果这些是促销代码,你不需要跟踪它们吗,或者根据一个特定的方案生成它们,而不仅仅是上面的六个随机字符,这样它们就可以被验证了吗?如果没有,就不能输入任意字符串作为促销代码吗?@tremby它将被存储为csv文件。然后你可以使用下面我答案的第一部分;生成CSV文件时,请加载CSV文件,并确保没有重复已存在的任何代码。但是要小心:如果你创建了很多代码,这将变得很慢!为了缓解这一问题,您可以将它们缓存在类似hashmap的结构中,就像redis中的集合。如果这些是升级代码,您不需要跟踪它们,或者根据特定的方案生成它们,而不是像上面那样只有六个随机字符,以便对它们进行验证吗?如果没有,就不能输入任意字符串作为促销代码吗?@tremby它将被存储为csv文件。然后你可以使用下面我答案的第一部分;生成CSV文件时,请加载CSV文件,并确保没有重复已存在的任何代码。但是要小心:如果你创建了很多代码,这将变得很慢!为了缓解这种情况,您可以将它们缓存在类似hashmap的结构中,就像redis中的集合一样。