JavaScript에서 임의의 영숫자 문자열?
JavaScript에서 임의의 영숫자(대문자, 소문자 및 숫자) 문자열을 생성하여 고유 식별자로 사용하는 가장 빠른 방법은 무엇입니까?
저는 이것을 매우 훌륭하고 우아한 해결책으로 생각해 냈습니다.
Math.random().toString(36).slice(2)
이 구현에 관한 주의사항:
- 부동소수점 문자열화에 의해 후행0이 삭제되기 때문에 0~12글자의 문자열이 생성됩니다(보통 11글자).
- 대문자는 생성되지 않고 소문자와 숫자만 생성됩니다.
- 은 '무작위'에서 때문입니다.
Math.random()
출력은 예측 가능하기 때문에 반드시 일의일 필요는 없습니다. - 이상적인 구현을 가정하더라도 출력에는 최대 52비트의 엔트로피가 있습니다.즉, 약 7,000만 개의 문자열이 생성된 후에 중복이 발생할 수 있습니다.
특정 문자만 허용하는 경우 다음과 같이 할 수도 있습니다.
function randomString(length, chars) {
var result = '';
for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
return result;
}
var rString = randomString(32, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
여기 jsfiddle이 있습니다.http://jsfiddle.net/wSQBx/
또 다른 방법은 사용할 문자 유형을 함수에 알려주는 특수 문자열을 사용하는 것입니다.다음과 같이 할 수 있습니다.
function randomString(length, chars) {
var mask = '';
if (chars.indexOf('a') > -1) mask += 'abcdefghijklmnopqrstuvwxyz';
if (chars.indexOf('A') > -1) mask += 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
if (chars.indexOf('#') > -1) mask += '0123456789';
if (chars.indexOf('!') > -1) mask += '~`!@#$%^&*()_+-={}[]:";\'<>?,./|\\';
var result = '';
for (var i = length; i > 0; --i) result += mask[Math.floor(Math.random() * mask.length)];
return result;
}
console.log(randomString(16, 'aA'));
console.log(randomString(32, '#aA'));
console.log(randomString(64, '#A!'));
바이올린: http://jsfiddle.net/wSQBx/2/
또는 다음과 같이 base36 메서드를 사용할 수도 있습니다.
function randomString(length) {
return Math.round((Math.pow(36, length + 1) - Math.random() * Math.pow(36, length))).toString(36).slice(1);
}
업데이트: 한 줄 솔루션(랜덤 20자) : 영숫자 소문자:
Array.from(Array(20), () => Math.floor(Math.random() * 36).toString(36)).join('');
또는 lodash로 단축:
_.times(20, () => _.random(35).toString(36)).join('');
JAR에 의해 제시된 답변의 또 다른 변형입니다.JAR.빈즈
(Math.random()*1e32).toString(36)
를 1e32
임의의 문자열의 길이를 변경할 수 있습니다.
또는 Jar Jar가 제안한 것을 바탕으로 최근 프로젝트에서 사용한 것(길이 제한을 극복하기 위해):
var randomString = function (len, bits)
{
bits = bits || 36;
var outStr = "", newStr;
while (outStr.length < len)
{
newStr = Math.random().toString(bits).slice(2);
outStr += newStr.slice(0, Math.min(newStr.length, (len - outStr.length)));
}
return outStr.toUpperCase();
};
용도:
randomString(12, 16); // 12 hexadecimal characters
randomString(200); // 200 alphanumeric characters
이게 더 깨끗해
Math.random().toString(36).substr(2, length)
예
Math.random().toString(36).substr(2, 5)
다음은 주어진 길이를 허용하는 가장 간단한 해결책이라고 생각합니다.
Array(myLength).fill(0).map(x => Math.random().toString(36).charAt(2)).join('')
화살표 함수 구문에 따라 다릅니다.
function randomString(len) {
var p = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
return [...Array(len)].reduce(a=>a+p[~~(Math.random()*p.length)],'');
}
요약:.
- (배열이에).
range(len)
javascript에 합니다.- 의 각 : "예"에서 합니다: "예"는 "예"에서 "예"
p
합니다.- 생성된 문자열을 반환합니다.
설명:
[...Array(len)]
Array(len) 또는 new Array(len)는 정의되지 않은 포인터를 사용하여 어레이를 만듭니다.원라이너들은 성공하기 더 어려울 것이다.스프레드 구문은 포인터를 편리하게 정의합니다(이제 포인터는 정의되지 않은 개체를 가리킵니다!).
.reduce(
이 경우 어레이를 단일 문자열로 줄입니다.기능 감소는 대부분의 언어에서 공통적으로 볼 수 있으며 배울 가치가 있습니다.
a=>a+...
화살표 기능을 사용하고 있습니다.
a
어큐뮬레이터입니다.이 경우 종료 시 반환되는 최종 결과 문자열입니다(reduced 함수에 대한 두 번째 인수가 빈 문자열이므로 문자열임을 알 수 있습니다).''
는 기본적으로 의 각 를 )로 변환합니다.p[~~(Math.random()*p.length)]
a
및 me (스트링)a
아, 아, 아, 아, 아, 아, 아, 아, 아.
p[...]
p
선택한 문자열입니다.의 문자에 액세스 할 수 「」 「」 「」 「」)."abcdefg"[3]
에게 주다"d"
)
~~(Math.random()*p.length)
Math.random()
[0, 1) 사이의 부동 소수점을 반환합니다.Math.floor(Math.random()*max)
javascript에서 임의의 정수를 얻기 위한 사실상의 표준입니다.~
javascript의 비트 단위 NOT 연산자입니다. ~~
, 확실히 재미있는 표현입니다.Math.floor(
몇 가지 가 있습니다.
32 문자:
for(var c = ''; c.length < 32;) c += Math.random().toString(36).substr(2, 1)
랜덤 문자:
String.fromCharCode(i); //where is an int
랜덤 입력:
Math.floor(Math.random()*100);
모든 것을 종합하면:
function randomNum(hi){
return Math.floor(Math.random()*hi);
}
function randomChar(){
return String.fromCharCode(randomNum(100));
}
function randomString(length){
var str = "";
for(var i = 0; i < length; ++i){
str += randomChar();
}
return str;
}
var RandomString = randomString(32); //32 length string
바이올린: http://jsfiddle.net/maniator/QZ9J2/
lodash 사용:
function createRandomString(length) {
var chars = "abcdefghijklmnopqrstufwxyzABCDEFGHIJKLMNOPQRSTUFWXYZ1234567890"
var pwd = _.sampleSize(chars, length || 12) // lodash v4: use _.sampleSize
return pwd.join("")
}
document.write(createRandomString(8))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
랜덤 키 생성기
keyLength 인수는 키에 필요한 문자 길이입니다.
function keyGen(keyLength) {
var i, key = "", characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var charactersLength = characters.length;
for (i = 0; i < keyLength; i++) {
key += characters.substr(Math.floor((Math.random() * charactersLength) + 1), 1);
}
return key;
}
keyGen(12)
"QEt9mYBiTpYD"
var randomString = function(length) {
var str = '';
var chars ='0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split(
'');
var charsLen = chars.length;
if (!length) {
length = ~~(Math.random() * charsLen);
}
for (var i = 0; i < length; i++) {
str += chars[~~(Math.random() * charsLen)];
}
return str;
};
이 질문을 봤을 때 UUID를 생성해야 할 때가 떠올랐습니다.여기 스택 오버플로우에서 찾은 것이 확실하기 때문에 코드의 신용을 얻을 수 없습니다.스트링에 대시를 삽입하지 않으려면 대시를 제거합니다.기능은 다음과 같습니다.
function generateUUID() {
var d = new Date().getTime();
var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(c) {
var r = (d + Math.random()*16)%16 | 0;
d = Math.floor(d/16);
return (c=='x' ? r : (r&0x7|0x8)).toString(16);
});
return uuid.toUpperCase();
}
바이올린: http://jsfiddle.net/nlviands/fNPvf/11227/
이 함수는 임의의 길이로 임의의 문자열을 제공해야 합니다.
function randString(length) {
var l = length > 25 ? 25 : length;
var str = Math.random().toString(36).substr(2, l);
if(str.length >= length){
return str;
}
return str.concat(this.randString(length - str.length));
}
다음 테스트를 성공시켜 테스트했습니다.
function test(){
for(var x = 0; x < 300000; x++){
if(randString(x).length != x){
throw new Error('invalid result for len ' + x);
}
}
}
입니다.Math.random().toString(36).substr(2, 25)
스물다섯 살이 번호는 원하는 대로 변경할 수 있습니다.
큰 값을 하면 이 함수는 "이러다"가 될 수 .Maximum call stack size exceeded
테스트 결과 30만 자 길이의 스트링을 얻을 수 있었습니다.
이 함수는 문자열을 함수에 두 번째 매개 변수로 전송하여 테일 재귀로 변환할 수 있습니다.JS가 테일콜 최적화를 사용하는지 잘 모르겠습니다.
길이가 걸리는 간단한 기능
getRandomToken(len: number): string {
return Math.random().toString(36).substr(2, len);
}
6을 통과하면 6자리 영숫자가 생성됩니다.
나이스하고 심플하며 특정 문자 수에 제한되지 않습니다.
let len = 20, str = "";
while(str.length < len) str += Math.random().toString(36).substr(2);
str = str.substr(0, len);
여기 랜덤 문자열 알파벳을 생성하는 간단한 코드가 있습니다.이 코드가 어떻게 작동하는지 보세요.
go(lenthOfStringToPrint);
- 이 함수를 사용하여 최종 문자열을 생성합니다.
var letters = {
1: ["q","w","e","r","t","y","u","i","o","p","a","s","d","f","g","h","j","k","l","z","x","c","v","b","n","m"],
2: ["Q","W","E","R","T","Y","U","I","O","P","A","S","D","F","G","H","J","K","L","Z","X","C","V","B","N","M"]
},i,letter,final="";
random = (max,min) => {
return Math.floor(Math.random()*(max-min+1)+min);
}
function go(length) {
final="",letter="";
for (i=1; i<=length; i++){
letter = letters[random(0,3)][random(0,25)];
final+=letter;
}
return final;
}
lodash uniqueId를 사용하면 됩니다.
_.uniqueId([prefix=''])
고유 ID를 생성합니다.프리픽스가 지정되면 ID가 추가됩니다.
md5 라이브러리 사용:https://github.com/blueimp/JavaScript-MD5
가장 빠른 방법:
md5(Math.random())
크기를 5로 제한하는 경우:
md5(Math.random()).substr(0, 5)
언급URL : https://stackoverflow.com/questions/10726909/random-alpha-numeric-string-in-javascript
'programing' 카테고리의 다른 글
스크립트를 실행하고 있는 Python 버전을 확인하려면 어떻게 해야 합니까? (0) | 2022.10.20 |
---|---|
어레이에서 스트림을 작성하려면 어떻게 해야 합니까? (0) | 2022.10.20 |
MySQL 선택 / NULL 손실 시 그룹화 (0) | 2022.10.20 |
NumPy 다차원 배열의 ith 열에 액세스하려면 어떻게 해야 합니까? (0) | 2022.10.20 |
OkHttp 요청 대행 수신기에 헤더를 추가하는 방법 (0) | 2022.10.20 |