有一个简短的解决方案(php 8.1):
$dict = array_merge(
...array_map(
fn(array $d): array => range(ord($d[0]), ord($d[1])),
[["0", "9"], ["a", "z"], ["A", "Z"]]
)
);
$f = fn (int $len): string =>
join(
"",
array_map(
fn (): string => chr($dict[random_int(0, count($dict) - 1)]),
range(0, $len)
)
);
echo $f(12) . PHP_EOL;
一行Bash脚本:
php -r '$dict = array_merge(...array_map(fn(array $d): array => range(ord($d[0]), ord($d[1])), [["0", "9"], ["a", "z"], ["A", "Z"]] )); $f = fn (int $len): string => join("", array_map(fn (): string => chr($dict[random_int(0, count($dict) - 1)]), range(0, $len) )); echo $f(12) . PHP_EOL;'
这是从https://dev59.com/0nI-5IYBdhLWcg3weoJP#41077923发展而来的想法。