公司有一個需求想要產生 unique id,雖然 PHP 有 uniqid
可以使用,但他最基本的長度是 13 個字元,所以決定自己刻一個利用 0-9、a-z 產生的亂數密碼,會有 PHP、nodejs 以及 shell script 版本。
PHP
| <?php |
| |
| function code($length = 10) |
| { |
| $codeString = '0123456789abcdefghijklmnopqrstubwxyz'; |
| $codeStringSplit = str_split($codeString); |
| $codeStringSize = count($codeStringSplit); |
| $code = ''; |
| |
| for ($i = 0; $i < $length; ++$i) { |
| $rand = mt_rand(0, $codeStringSize - 1); |
| $code .= $codeStringSplit[$rand]; |
| } |
| |
| return $code; |
| } |
| |
| for ($i = 0; $i < 10; $i++) { |
| echo code().PHP_EOL; |
| } |
node.js
| function code(length) { |
| var stringLength = length || 10; |
| var codeString = '0123456789abcdefghijklmnopqrstubwxyz'; |
| var codeStringSplit = codeString.split(''); |
| var codeStringSize = codeStringSplit.length; |
| var code = ''; |
| var min = 0; |
| var max = codeStringSize - 1; |
| |
| for (var i = 0; i < stringLength; ++i) { |
| var rand = Math.floor(Math.random() * (max - min + 1)) + min; |
| |
| code += codeStringSplit[rand]; |
| } |
| |
| return code; |
| } |
| |
| for (var i = 0; i < 10; ++i) { |
| console.log(code()); |
| } |
bash
| #!/bin/bash |
| |
| function code() { |
| result="" |
| length=10 |
| codeString="0123456789abcdefghijklmnopqrstubwxyz"; |
| declare -a array |
| |
| for (( i = 0; i < ${#codeString}; i++ )); do |
| array+=(${codeString:$i:1}) |
| done |
| |
| if [[ -n $1 ]]; then |
| declare -i length=$1 |
| fi |
| |
| max=$((${#array[@]} - 1)) |
| |
| for (( i = 0; i < ${length}; i++ )); do |
| rand=$(shuf -i 0-${max} -n 1) |
| result="${result}${array[${rand}]}" |
| done |
| |
| echo ${result} |
| } |
| |
| for (( j = 0; j < 10; j++ )); do |
| code |
| done |
沒有留言:
張貼留言