ID加密和密码盐生成和随机指定长度字符串和Token生成(全球唯一标识)

ID加密:

    /**
     * ID加密
     * @param mixed $id 要加密的ID
     * @param boolean $is_decrypt 默认为false 为 true 时反向解密
     * @param mixed $str_len 返回结果的字符串长度
     * @param string $key 密钥(增加安全性)
     */
    public function alphaID($id, $is_decrypt = false, $str_len = false, $key = null)
    {
        $out = '';
        // 26个小写英文字母+26个大写英文字母+10个数字
        $index = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        // 字符串长度
        $base = strlen($index);
        // 密钥存在, 加密字符串增加安全性
        if ($key !== null) {
            for ($n = 0; $n < strlen($index); $n++) {
                $i[] = substr($index, $n, 1);
            }
            $pass_hash = hash('sha256', $key);
            $pass_hash = (strlen($pass_hash) < strlen($index) ? hash('sha512', $key) : $pass_hash);
            for ($n = 0; $n < strlen($index); $n++) {
                $p[] = substr($pass_hash, $n, 1);
            }
            array_multisort($p, SORT_DESC, $i);
            $index = implode($i);
        }

        if ($is_decrypt) { // 解密
            $len = strlen($id) - 1;
            for ($t = $len; $t >= 0; $t--) {
                $bcp = bcpow($base, $len - $t);
                $out = $out + strpos($index, substr($id, $t, 1)) * $bcp;
            }
            if (is_numeric($str_len)) {
                $str_len--;
                if ($str_len > 0) {
                    $out -= pow($base, $str_len);
                }
            }
        } else { // 加密
            if (is_numeric($str_len)) {
                $str_len--;
                if ($str_len > 0) {
                    $id += pow($base, $str_len);
                }
            }
            for ($t = ($id != 0 ? floor(log($id, $base)) : 0); $t >= 0; $t--) {
                $bcp = bcpow($base, $t);
                $a = floor($id / $bcp) % $base;
                $out = $out . substr($index, $a, 1);
                $id = $id - ($a * $bcp);
            }
        }
        return $out;
    }

获取随机字符串(密码盐):

    /**
     * 获取随机字符串(密码盐)
     */
    public function code_salt()
    {
        // 取随机6位字符串
        $strs = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $name = substr(str_shuffle($strs), mt_rand(0, strlen($strs) - 11), 6);
        echo $name;
    }
生成指定长度随机字符串:
/**
 * 生成指定长度随机字符串
 * @param $len
 * @return null|string
 */
function randStr($len)
{
    $randStr = null;
    $strPol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
    $max = strlen($strPol) - 1;
    for ($i = 0; $i < $len; $i++) {
        $randStr .= $strPol[rand(0, $max)];
    }
    return $randStr;
}
Token生成(全球唯一标识):
    /**
     * Token生成(全球唯一标识)
     *
     * sprintf() : 把格式化的字符串写入一个变量中
     * 语法为 : sprintf(format arg1 arg2 arg++);
     * 参数:
     * format: 必须,转换格式
     * arg1 : 必须,规定插入 format 字符串中第一个%符号处的参数
     * arg1 : 可选,规定插入 format 字符串中第二个%符号处的参数
     * arg1++ : 可选,规定插入 format 字符串中第三、四等%符号处的参数
     * 参数 format 的转换格式 以百分比符号(%)开始到转换字符结束 下面是有可能的format值.
     * %% – 返回百分比符号
     * %b – 二进制数
     * %c – 依照 ASCII 值的字符
     * %d – 带符号十进制数
     * %e – 可续计数法(比如 1.5e+3)
     * %u – 无符号十进制数
     * %f – 浮点数(local settings aware)
     * %F – 浮点数(not local settings aware)
     * %o – 八进制数
     * %s – 字符串
     * %x – 十六进制数(小写字母)
     * %X – 十六进制数(大写字母)
     */
    public static function code_token()
    {
        return sprintf(
            '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
            mt_rand(0, 0xffff),
            mt_rand(0, 0xffff),
            mt_rand(0, 0xffff),
            mt_rand(0, 0x0fff) | 0x4000,
            mt_rand(0, 0x3fff) | 0x8000,
            mt_rand(0, 0xffff),
            mt_rand(0, 0xffff),
            mt_rand(0, 0xffff)
        );
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

withoutfear

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值