>  기사  >  웹 프론트엔드  >  JavaScript에서 난수 및 문자열 생성

JavaScript에서 난수 및 문자열 생성

王林
王林원래의
2023-09-02 08:57:121411검색

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() 메서드는 암호화된 보안 난수를 생성하는 데 적합하지 않지만 Crypto.getRandomValues() 메서드가 여기서 도움이 될 수 있습니다. 이 메소드는 암호화된 보안 의사 난수로 전달된 배열을 채웁니다. 이러한 난수를 생성하는 데 사용되는 알고리즘은 사용자 에이전트마다 다를 수 있습니다.

앞서 언급했듯이 정수 기반 TypedArray을 메서드에 전달하여 임의의 값으로 채워야 합니다. 배열의 원래 내용이 대체됩니다. 다음 코드는 10개 요소로 구성된 배열을 임의의 정수로 채웁니다.

으아악

Unit8Array() 생성자는 10개의 8비트 부호 없는 정수 배열을 제공합니다. 배열 값은 모두 0으로 초기화됩니다.

이 배열을 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.