Lumen7.x使用笔记(十二)封装随即数生成器

作者: 太阳上的雨天 分类: Lumen7.x使用教程,PHP 发布时间: 2020-10-03 15:49

Lumen7.x使用笔记(十二)封装随即说生成器

<?php

namespace App\Utils;

use Exception;
use Webpatser\Uuid\Uuid;
use WptCommon\Library\Facades\MLogger;

class Automatic
{
    /**
     * Notes:
     * Date: 2020/10/14
     * @param int $length
     * @return string
     */
    public static function generatedRandom(int $length)
    {
        $pattern = "abcdefghilkmnopqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXY";
        $str = self::getRandom($length - 20, $pattern);
        try {
            $pattern = $str . substr(md5(Uuid::generate()->string . time()), 0, 20);
        } catch (Exception $e) {
            MLogger::info('generatedRandomFailed', '生成随机数失败');
        }
        $appKeyOrSecrets = str_split($pattern);
        foreach ($appKeyOrSecrets as $key => $appKeyOrSecret) {
            $check = ord($appKeyOrSecret);
            if (($check >= 65 && $check <= 90) || ($check >= 97 && $check <= 122)) {
                $newArr[] = empty(rand(0, 1)) ? strtoupper($appKeyOrSecret) : $appKeyOrSecret;
            } else {
                $newArr[] = $appKeyOrSecret;
            }
        }
        if (empty($newArr)) {
            MLogger::info('strSplitToupperFailed', '随机转换大小写失败');
            return '';
        }
        return implode('', $newArr);
    }

    /**
     * Notes: 自动生成用户名|AppID|userInfoId
     * @param int $action
     * @return string
     */
    public static function automaticGenerated(int $action): string
    {
        $pattern = '23456789#abcdefghilkmnopqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXY';
        switch ($action) {
            case 1:
                return self::getRandom(7, $pattern);
            case 2:
                return self::getRandom(6, $pattern);
            default:
                return self::getRandom(10, $pattern);
        }
    }

    /**
     * Notes: 随机字符串
     * @param int $length
     * @param string $pattern
     * @return string
     */
    protected static function getRandom(int $length, string $pattern): string
    {
        $key = '';
        for ($i = 0; $i < $length; $i++) {
            $key .= $pattern{mt_rand(0, 35)};
        }
        return $key;
    }
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注