JavaScript를 사용하여 임의의 영숫자 문자열 생성

오늘은 POST 요청 본문에 "ID "를 보내야 했습니다. API는 값이 무엇인지 상관하지 않는 것으로 나타났습니다. 영숫자(a-z, A-Z, 0-9), 정확히 18자 길이여야 하며 아직 시스템에 포함되어 있지 않아야 합니다.

그래서 임의의 문자열*을 생성하기로 결정했습니다!

닥치고 코드를 줘!




const randomString = (len = 1) => new Array(len*2).fill(1000).map((x) => Math.ceil(x * Math.random()).toString(36).charAt(0)).filter(Boolean).sort(() => Math.random() - 0.5).map((x,i) => i % 2 === 0 ? x.toUpperCase() : x).join('').substr(0,len)


이제 분해해 보겠습니다!



그 한 줄에 많은 일이 일어나고 있습니다!

먼저, 필요한 것보다 두 배 많은 "문자"를 사용하여 Array를 만듭니다.

그런 다음 배열의 각 항목에 숫자 1000을 지정합니다fill.

각 항목( .map() )에 대해 0과 1 사이에서 무작위로 생성된 숫자를 곱하여 숫자를 무작위화합니다( x * Math.random() ). 그런 다음 두 문자 문자열로 변환됩니다. 첫 번째 문자만 필요하므로 charAt(0) 를 사용하여 잡아봅시다. [0]를 약어로 사용할 수도 있습니다.

이제 우리는 우리가 요청한 것보다 두 배 많은 임의의 영숫자 문자로 구성된 배열을 갖게 되었습니다.

안전을 위해 .filter(Boolean)를 사용하여 비어 있거나 잘못된 값을 제거합니다. 이렇게 하면 모든 0이 제거되지만 meh 🤷‍♀️

나머지 값은 .sort(() => Math.random() - 0.5) 를 사용하여 새로운 무작위 순서로 섞입니다.

그런 다음 새 배열을 다시 반복하고 모든 짝수 인덱스 문자는 대문자로 표시됩니다(가능한 경우 - 0에서 9까지의 숫자는 대문자로 사용할 수 없음).

이제 훨씬 더 많은 임의의 문자 배열이 있지만 이것은 randomString입니다. 배열이 무슨 소용이 있습니까? 어레이를 함께 join('') 해야 합니다. '' 구분 기호가 필요합니다. 구분 기호가 없으면 문자열은 쉼표로 가득 차게 됩니다.

마지막으로 문자열이 우리가 필요로 하는 길이의 두 배라는 것을 기억하십니까? - 문자열의 시작 부분부터 올바른 수의 문자를 반환합니다.

결론



그래서 거기에 있습니다! 나는 그것이 얼마나 잘 수행되는지 모르지만 어쨌든 프로덕션에서 임의의 문자열을 생성해서는 안됩니다! 😬

이것이 아마도 가장 유용한 것은 다음으로 구성된 개별 구성 요소를 가지고 노는 것입니다.
  • 채우기: Array.fill()
  • 셔플: Array.sort(() => Math.random() - 0.5)
  • 모듈러스: i % 2 === 0
  • '거짓' 값 제거: Array.filter(Boolean)

  • thomas×banks(ツ)의 펜 Generate a random Alphanumeric String using JavaScript 보기(@thomasxbanks )
    CodePen .

    * 이 문제에 대한 더 나은 해결책은…

    const id = btoa(new Date()).substr(0,18);
    

    ...하지만 거기에 재미가 어디 있습니까?! 😈

    좋은 웹페이지 즐겨찾기