ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript で乱数と文字列を生成する

JavaScript で乱数と文字列を生成する

王林
王林オリジナル
2023-09-02 08:57:121479ブラウズ

JavaScript で乱数と文字列を生成する

乱数または英数字文字列を生成する機能は、多くの状況で役立ちます。これを使用して、ゲーム内のさまざまな場所に敵や食べ物をスポーンできます。これを使用して、ユーザーにランダムなパスワードを提案したり、ファイルを保存するためのファイル名を作成したりすることもできます。

PHP でランダムな英数字文字列を生成する方法に関するチュートリアルを書きました。この投稿の冒頭で、真にランダムなイベントはほとんどないと述べましたが、乱数や文字列の生成にも同じことが当てはまります。

このチュートリアルでは、JavaScript で擬似ランダムな英数字文字列を生成する方法を説明します。

JavaScript で乱数を生成する

乱数を生成することから始めましょう。最初に思い浮かぶメソッドは Math.random() で、これは浮動小数点の擬似乱数を返します。乱数は常に 0 以上 1 未満になります。

この範囲で返される数値の分布はほぼ均一であるため、このメソッドは日常使用において明らかな逸脱を生じることなく適切に乱数を生成できます。以下は、Math.random() メソッドに対する 10 回の呼び出しの出力です。 リーリー

範囲内のランダムな整数を生成します

前のセクションで見たように、

Math.random() は 0 (両端を含む) から 1 (両端を含まない) の範囲の乱数を返します。 0 (両端を含む) から 100 (両端を含まない) の範囲のランダムな整数が必要だとします。ここで行う必要があるのは、元の範囲を 100 倍することだけです。

上記のコード スニペットの最初の出力値を例にとると、0.9981169188071801 は 100 倍すると 99.81169188071801 になります。これで、

Math.floor() メソッドを使用できるようになります。このメソッドは、値が 99.81169188071801 以下である最大の整数を切り捨てて返します。つまり、99 が得られます。

次のコード スニペットは 10 回ループし、さまざまな番号に適用されるこれらすべての手順を示します。

リーリー

乗算と丸めの背後にあるロジックを理解したので、最大制限内でランダムな整数を生成する関数を作成できます。

リーリー

指定した最小値を超え、最大値を下回る乱数を生成したい場合はどうすればよいでしょうか?

この場合、最小値を先頭に追加して、結果の数値が少なくとも最小値と等しくなるようにすることができます。その後、乱数を生成し、それを

max - min でスケールし、それを可能な限り最小の値に加算するだけです。 リーリー

暗号的に安全な乱数を生成する

Math.random() メソッドは暗号的に安全な乱数の生成には適していませんが、Crypto.getRandomValues() メソッドはここで役に立ちます。このメソッドは、渡された配列に暗号的に安全な擬似乱数を埋めます。これらの乱数の生成に使用されるアルゴリズムはユーザー エージェントによって異なる場合があることに注意してください。

前に述べたように、整数ベースの

TypedArray をメソッドに渡して、メソッドにランダムな値を入力する必要があります。配列の元の内容は置き換えられます。次のコードは、10 要素の配列にランダムな整数を入力します。 リーリー

Unit8Array() コンストラクターは、10 個の 8 ビット符号なし整数の配列を提供します。配列の値はすべてゼロに初期化されます。

この配列を

getRandomValues() メソッドに渡すと、乱数値は 0 ~ 255 の範囲のままになります。他のタイプの配列を使用して、さまざまな範囲の乱数を生成できます。たとえば、Int8Array() コンストラクターを使用すると、-128 から 127 までの整数値の配列が得られます。同様に、Uint16Array() を使用すると、最大 65,535 の整数値の配列が得られます。 リーリー p>JavaScript でランダムな英数字文字列を生成する

前のセクションで得た知識を使用して、JavaScript でランダムな英数字文字列を生成します。

コンセプトは非常にシンプルです。必要な文字をすべて含む文字列から始めます。この例では、文字列は小文字、大文字、および 0 ~ 9 の数字で構成されます。すでにご存知かもしれませんが、文字列にインデックス値を渡すことで、文字列内の特定の位置にある文字にアクセスできます。

ランダムな英数字文字列を生成するには、乱数を生成し、そのランダムなインデックスにある文字にアクセスして、それをランダムな文字列に追加するだけです。次のコード スニペットは、すべてを素敵な小さな関数にまとめています:

const char_set = 'abcdefghijlkmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';

function max_random_number(max) {
  return Math.floor(Math.random() * max);
}

function get_random_string(length) {
  let random_string = '';

  for(let i = 0; i < length; i++) {
    random_string += char_set[max_random_number(char_set.length - 1)];
  }
  
  return random_string;
}

console.log(get_random_string(20));
// Outputs: lgtuRJZolu7AXj4HMoiM

console.log(get_random_string(40));
// outputs: scOoal3VXgeAjaHIieolhi2TyWFpAn5bBPPiX6UG

使用 toString() 生成随机字母数字字符串

我们可以用来生成随机字母数字字符串的另一种方法是对随机生成的数字使用 toString() 方法。 toString() 方法返回一个表示我们指定数值的字符串。此方法接受可选的 radix 参数,该参数指定要表示数字的基数。值为 2 将返回二进制字符串,值为 16 将返回十六进制字符串。该参数默认值为10。最大值可以为36,因为它涵盖了全部26个字母和10个数字。

以下是针对不同 radix 值对此方法进行几次调用的输出:

let number = 3498650143868;

console.log(number.toString(2));
// Outputs: 110010111010010111110011001000110001111100

console.log(number.toString(10));
// Outputs: 3498650143868

console.log(number.toString(16));
// Outputs: 32e97cc8c7c

console.log(number.toString(36));
// Outputs: 18n99yoak

您可能已经注意到,随着我们增加 radix,输出字符串的长度不断减少。在下面的代码片段中,我们将使用上一节中的 max_random_number() 函数来获取随机数。然后,我们将使用 toString() 方法将此随机数转换为字母数字字符串。

function max_random_number(max) {
  return Math.floor(Math.random() * max);
}

for(let i = 0; i < 10; i++) {
  console.log(max_random_number(Number.MAX_SAFE_INTEGER).toString(36));
}
/* Outputs:
1tr84s6c2sl
1yj4varyoj7
1zdg9nn0z6r
lubrjj1zih
13tt2n5vw9t
1mv6sctjgf
yx3fhnznhf
1wj4mdcrqb9
26sir75af2r
qdv9xv800t
*/

如果您想要更大的字母数字字符串并希望它们具有固定长度(例如 40 个字符或 100 个字符)怎么办?在这种情况下,我们可以创建一个循环,不断附加生成的字符串,直到达到所需的长度。

function max_random_number(max) {
  return Math.floor(Math.random() * max);
}

function get_random_string(length) {
  let random_string = '';
  while(random_string.length < length) {
   random_string += max_random_number(Number.MAX_SAFE_INTEGER).toString(36);
  }
  return random_string.substring(0, length);
}

console.log(get_random_string(40));
// Outputs: bn0nfhcsjm18ylzqrm6bo1iktka2aq7qbbl5ybki

console.log(get_random_string(100));
// Outputs: rdosjhthsevmk91mj9zvqexz2z0v3pe2beasbzoworanzjg3bfpf975rzfy2fmo6pmj4p69u0x80ce92jh2vljx90g6r0lzd8vb0

最终想法

在本教程中,我们学习了如何在 JavaScript 中生成随机数和字母数字字符串。借助 Math.random() 方法,在 JavaScript 中生成随机整数很容易。我们所要做的就是缩放输出,使其符合我们所需的范围。如果您希望随机数具有加密安全性,您还可以考虑使用 getRandomValues() 方法。

一旦我们知道如何生成随机数,创建随机字母数字字符串就很容易了。我们需要做的就是弄清楚如何将数字转换为字符。我们在这里使用了两种方法。第一个涉及访问预定义字符串中随机数字索引处的字符。如果您想具体了解随机字母数字字符串中应包含的字符,则此技术非常有用。另一种方法涉及使用 toString() 方法将十进制数转换为不同的基数。这减少了对 max_random_number() 函数的调用。

当然还有更多技术可用于生成随机字母数字字符串。这完全取决于您的需求以及您想要的方法的创意程度。

以上がJavaScript で乱数と文字列を生成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。