난수가 나를 물린 첫 번째 시간은 내가 Toolz.dev 를 구축하기 시작하기 몇 년 전에 Laravel 측 프로젝트에 있었다. 나는 짧은 추천 코드가 필요,에 도달 rand() 바로 거기에 있었고,배송했기 때문입니다. 일주일 후 두 명의 사용자가 동일한 코드를 가졌습니다. 확률이 천문학적 이었기 때문이 아니라 내가 무엇을 오해했기 때문입니다 rand() 실제로 약속했다. 그 작은 당황은 나에게 Toolz.dev 에 모든 도구에 수행 한 교훈을 가르쳐 주었다: & quot;random" 한 가지가 아닙니다. 주사위 굴림에 적합한 캐주얼 랜덤이 있으며,값이 무엇이든 지키는 순간 필요한 심각한 랜덤이 있습니다.
이 가이드는 제가 그 때 누군가 제게 말해주었으면 하는 것의 긴 버전입니다. 저는 어떻게 난수를 생성하는지 그 때를 통해 걸을 것입니다 난수 생성기 Toolz.dev에서 고유 전용 세트가 중요할 때 무작위성의 소스가 출력을 안전하게 사용할 수 있는 항목을 변경하는 이유와 구축하는 동안 해당 세트에 도달하는 실제 사례입니다.
TL;DR: 난수 생성기는 정의한 범위에서 값을 가져옵니다. 최소값과 최대값을 설정하고 원하는 숫자 수를 선택하고 정수나 소수를 선택합니다. 값이 반복되지 않을 때에만 고유하게 켜집니다. 이는 복권,추첨 및 대체 없는 샘플링에 대해 원하는 것입니다. Toolz.dev 생성기는 브라우저에서 완전히 실행되며 무작위성 때문에 Web Crypto API 를 선호하므로 생성하는 모든 항목이 장치를 떠나지 않습니다.
난수 생성기는 실제로 무엇을 합니까?
난수 생성기는 예측할 수 없는 비트 소스를 범위에 매핑합니다. 이것이 전체 작업입니다. 브라우저에서 중요한 소스는 다음과 같습니다 crypto.getRandomValues()웹 암호화 API가 암호화적으로 강력해야 하는 것과는 다릅니다 Math.random()그런 약속을 하지 않는, 입니다. 여러분은 간격, 1 부터 100 까지를 말하고, 그리고 그것은 이상적으로 모든 값이 나타날 확률이 같은 그 간격 안에서 값을 반환합니다. 하나 이상을 요구하면 무승부를 반복합니다.
흥미로운 부분은 "unpredictable,"라는 단어입니다. 왜냐하면 컴퓨터는 자연적으로 놀라움을 만들어내지 않는 결정론적 기계이기 때문입니다. 컴퓨터가 만들어내는 것은 의사 무작위성입니다: 무작위로 보이고 통계적 테스트를 통과하지만 시작 시드의 알고리즘에 의해 생성되는 시퀀스입니다. 동일한 알고리즘에 동일한 시드를 주면 매번 동일한 시퀀스를 얻습니다. 그 재현성은 반복 가능해야 하는 테스트를 작성할 때의 특징이며,추측할 수 없어야 하는 것을 주조할 때의 책임입니다.
Toolz.dev에서 생성기는 브라우저에 위치하며 해당 비트를 읽습니다 crypto.getRandomValues 브라우저가 그것을 드러낼 때,모든 현대 브라우저가 하는. 그 기능은 W3C 웹 암호 API 에 의해 정의되고 운영 체계's 암호로 안전한 근원에 의해 역행됩니다. 그 근원이 출석할 때,숫자는 토큰을 따기 같이 안전 인접하는 일을 위해 충분히 예측할 수 없습니다 또는 갑판을 섞기. 어떻게든 사용할 수 없을 때,도구는 표준 자바스크립트 발전기로 되돌아갑니다,게임과 표본 추출을 위해 정밀합니다 그러나 어떤 비밀도 씨를 뿌려서는 안됩니다. 당신이 어느 RNG 잘 사용에 관하여 단 하나 가장 중요한 것 당신이 인 그 2 개의 세계 중 어느 것에 있는지 아는 것은.
어떻게 Toolz.dev 에 난수를 생성합니까?
대부분의 경우 숫자만 원하고 지금 원하기 때문에 흐름이 의도적으로 짧습니다.
먼저 범위를 설정합니다. 최소값과 최대값을 입력합니다. 정수의 경우 범위는 양쪽 끝에 포함되므로 1 ~ 6 은 1,2, 3,4, 5 또는 6 중 하나를 반환 할 수 있습니다. -50 ~ 50 과 같이 0 에 걸쳐있는 음수 값과 범위는 동일한 방식으로 작동합니다.
둘째,원하는 숫자 수를 선택하십시오. 빠른 선택을위한 하나의 숫자,또는 테스트 데이터를 시드하거나 샘플을 구축 할 때 최대 만 개의 배치.
셋째,옵션을 선택합니다. "integers only"를 정수에 대해 그대로 두거나,분수 값이 필요할 때 끄고 소수점 자릿수를 설정합니다. "unique values only" 숫자가 반복되지 않을 때.
마지막으로 생성을 클릭합니다. 결과는 합계 및 평균과 함께 목록을 표시하고 전체 일괄 처리는 개행으로 구분된 목록으로 복사되므로 스프레드시트 열,스크립트 또는 테스트 픽스처로 바로 드롭됩니다.If you have used the UUID 생성기 또는 the 비밀번호 생성기 Toolz.dev에서는 생성기의 일관성을 유지하려고 노력하기 때문에 이것의 모양이 친숙하게 느껴질 것입니다.
고유 전용 번호는 언제 사용해야 하나요?
이것은 사람들이 놓친 옵션이며, 수학을 가장 많이 바꾸는 옵션입니다.
기본적으로 발전기는 교체로 추첨합니다. 모든 추첨은 독립적이므로 동일한 배치에서 숫자가 두 번 이상 나타날 수 있습니다. 실제 주사위 쌍은 절대적으로 두 개의 4 를 얻을 수 있기 때문에 롤링 주사위에 맞습니다. 그러나 복권 추첨,추첨 또는 토큰을 다시 가방에 넣지 않고 샘플을 선택할 때마다 잘못되었습니다.
고유 전용을 켜고 발전기는 교체없이 그립니다. 이미 생산 한 것을 기록하고 배치를 채울 때까지 반복을 건너 뜁니다. 고전적인 용도는 복권 번호입니다: 중복없이 1 에서 49 까지의 6 개의 숫자를 원한다면 고유 전용은 유효한 티켓과 깨진 티켓의 차이입니다.
여기에는 자연스러운 한계가 있고,도구는 이를 존중합니다. 범위를 유지할 수 있는 것보다 더 많은 고유 정수를 그릴 수 없습니다. 1 과 5 사이에 10 개의 고유 숫자를 요청하면 유효한 답이 없습니다. 왜냐하면 그 간격에는 5 개의 고유 정수만 존재하기 때문입니다. 여섯 번째 불가능한 값을 찾으려고 영원히 회전하는 대신 생성기는 멈추고 범위가 너무 작다고 알려줍니다. 생산 코드에 너무 많은 순진한 셔플 루프가 걸려 있는 것을 보고 일부러 그 가드를 구축했습니다.
정수 또는 소수: 어떤 것이 필요합니까?
정수는 대부분의 요청을 커버합니다. 주사위,복권 공,배열 색인,기록 개수는 모두 정수이며,정수 모드는 사람들이 그런 것들에 대해 어떻게 생각하는지 일치하는 포괄적인 범위를 제공합니다.
소수는 연속적인 양을 위해 이다: 무작위 가격, 가장한 감지기 독서, 무게, 확율. 정수 형태를 끄거든 공구는 최소한을 포함하고 그러나 최대가 아닌 반 열리는 간격에서 당긴다. 그 반 열리는 규칙, 최소 포함되고 제외된 최대는, 자바스크립트's를 포함하여 모든 언어에 있는 거의 각 부동 소수점 RNG의 기초가 되는 것과 동일하다 Math.random0 에서 1 까지의 범위에 있는 값을 반환하지만 1 을 포함하지 않는 값입니다. 해당 규칙을 일치시킨다는 것은 여기서 얻은 숫자가 코드에서 얻을 수 있는 숫자처럼 동작한다는 것을 의미합니다.
또한 소수점 자리 수를 1 에서 10 까지 제어합니다. 통화와 같은 값에는 두 자리가 적합하며 더 미세한 해상도가 필요한 측정을 시뮬레이션할 때는 더 많은 자리가 필요합니다. 고유 소수점만 더한 값은 거의 항상 만족할 수 있다는 점을 명심하세요. 고유 소수점만 더한 작은 정수 범위는 위에서 설명한 벽에 부딪히는 위치이기 때문입니다.
얼마나 무작위인가 "random enough"?
여기 제가 그 추천-코드 사건 이전에 봤으면 좋았을 표가 있습니다. 일반적인 사용 사례를 그들이 실제로 요구하는 종류의 무작위성에 매핑합니다.
| 사용 사례 | 무작위성이 필요합니다 | 반복이 허용됩니까? | 노트 |
|---|---|---|---|
| 주사위, 보드 게임 | 의사 랜덤은 괜찮습니다 | 예 | 롤당 독립성이 포인트입니다 |
| 무작위 우승자를 선택합니다 | 암호화 선호 | 아니요(고유 전용) | 공정성이 중요합니다. 고유만 사용하십시오 |
| 복권 또는 추첨 번호 | 암호화 선호 | 아니요(고유 전용) | 교체 없이 그립니다 |
| 분석을 위한 샘플링 행 | 의사 랜덤은 괜찮습니다 | 보통은 아니죠 | 교체 없이 샘플링에만 고유합니다 |
| 시딩 테스트 비품 | 의사 랜덤은 괜찮습니다 | 예 | 재현성이 바람직할 수도 있습니다 |
| 보안 토큰, 비밀 | 암호화 필수 | 아니요 | 여기서는 절대 일반 PRNG를 사용하지 마세요 |
사람을 위로 이동시키는 행은 "security tokens." 범용 RNG 는 좋은 것이라도 특수 목적으로 만들어진 비밀 생성기를 대신할 수 없습니다. API 키,세션 토큰 또는 암호를 만드는 경우 해당 작업을 위해 설계된 도구를 사용하십시오 비밀번호 생성기또는 다음과 같은 해싱 도구입니다 해시 생성기 고정 길이의 다이제스트가 필요할 때. 난수 생성기는 암호 키 자료가 아닌 범위의 숫자에 대한 것이며,그 경계의 정직한 프레임은 하나의 도구가 모든 것을하는 척하는 것보다 더 유용합니다.
실제로 그것으로 무엇을 만들 수 있습니까?
이것이 내 작업 흐름에서 자리를 잡는 몇 가지 방법.
목록을 렌더링하는 UI 를 테스트 할 때 수량,가격 또는 점수를 나타내는 몇 백 개의 숫자 배치를 생성하고 고정 장치에 붙여 넣은 다음 갑자기 레이아웃이 동일한 세 개의 핸드 타입 행 대신 현실적인 다양성으로 실행됩니다. WP Adminify 에서 WordPress 작업의 경우 데모 콘텐츠를 채우기 위해 임의의 값을 사용하여 설정 화면이 스크린 샷에서 살아 보이는 것처럼 보입니다.
클라이언트가 경품을 실행할 때,독특한 전용 모드는 번호가 매겨진 참가자 목록에서 공정하게 우승자를 선택합니다. 각 참가자에게 번호를 할당하고,상금이 있는 만큼 고유 우승자를 추첨합니다. 스프레드시트 공식도 없고,추첨이 조작되었는지 여부에 대한 논쟁도 없습니다. 왜냐하면 숫자는 우리 중 누구도 통제하지 못하는 소스에서 나왔기 때문입니다.
빠른 통계적 직관을 위해 큰 배치를 생성하고 합계와 평균을 흘끗 보는 것은 범위와 분포가 동작하고 있다는 빠른 온전한 확인입니다. 1 에서 100 까지의 숫자를 요구하고 평균이 50 근처로 돌아 오면 세계는 예상대로입니다.
그리고 일상적인 물건에 대해서는 주사위 롤러,1 과 2 를 머리와 꼬리로 취급 할 때 동전 뒤집기,그리고 & quot;pick a number" settler of small arguments. 모든 사용이 유용하기 위해 심각 할 필요는 없습니다.
이것은 자신의 글을 쓰는 것과 어떻게 비교됩니까?
쓸 수 있었죠 Math.floor(Math.random() * (max - min + 1)) + min 그리고 완료. 나는 그 라인을 천 번을 썼다. 그래서 왜 도구에 도달?
두 가지 이유,둘 다 어려운 방법을 배웠습니다. 첫 번째는 오프 바이 원과 모듈로 바이어스 실수로 손으로 굴린 범위 수학에 스며들며,특히 포괄적 인 대 배타적 경계와 고유 한 요구 사항을 추가하면 도구는 "you requested for more unique values than exist" case 를 포함한 가장자리 케이스를 처리하므로 오전 2 시에 재발견하지 않습니다. 두 번째는 그 Math.random 은 명시적으로 암호화적으로 안전하지 않으며 MDN 문서에서 명백하게 기술한 사실이며 나중에 실제 무언가를 보호하는 코드에 스니펫을 붙여넣을 때 잊어버리기 쉽습니다. Toolz.dev 생성기는 기본적으로 암호화 소스로 설정되므로 더 안전한 동작은 생각하지 않고 얻을 수 있는 동작입니다.
제어하는 환경에서 일회성 숫자의 경우 스니펫이 괜찮습니다. 반복 가능한 드로우,고유 세트,복사하려는 배치 또는 기본적으로 암호화 소스를 원하는 모든 경우 도구는 까다로운 부분을 저장합니다.
작업이 숫자 생성보다 인코딩 및 형식 지정에 더 중점을 두는 경우 동일한 클라이언트 측 철학이 도구 상자의 나머지 부분을 통해 실행됩니다 로렘 입숨 에서 다루는 더 넓은 세트에 대한 자리 표시자 텍스트 생성기입니다 개발자 생산성 도구 안내합니다. 그리고 이 모든 것이 로컬로 실행되기 때문에 데이터 개인 정보 보호 스토리는 그들 모두에 걸쳐 동일 합니다: 입력은 브라우저에 머물.
사람들이 난수로 흔히 저지르는 실수는 무엇인가?
코드, 내 및 다른 사람 & # 39;s를 검토 한 지 몇 년이 지나면 같은 소수의 실수가 계속해서 나타나며 이름을 지정할 가치가 있으므로 피할 수 있습니다.
첫 번째는 혼란 "unlikely"와 "impossible." 내 추천 코드 이야기는 정확히이. 당신이 범위에서 교체로 그릴 때 충돌은 버그가 아니라 충분한 무승부가 주어진 통계적 확실성. 생일 역설은 고전적인 그림입니다: 단지 23 사람들의 그룹에서 두 사람이 생일을 공유 할 수있는 기회는 직관이 제안하는 것보다 훨씬 높은 50 퍼센트 이상입니다,당신은 모든 쌍을 비교하기 때문에,하나의 고정 된 날짜에 모든 사람을 비교하지. 당신의 값이 고유해야하는 경우,범위가 충분히 큰 희망하지 마십시오. 고유 전용을 켜고 의심을 제거합니다.
두 번째는 잘못된 소스에 도달합니다. 튜토리얼의 많음은에 내장 된 범위 공식을 보여줍니다 Math.random 그리고 보안에 민감한 어떤 것에도 적합하지 않다는 것을 절대 언급하지 마십시오. 값이 무작위로 보이고,데모가 작동하며,습관이 달라 붙습니다. 그런 다음 누군가가 암호 재설정 토큰을 생성하는 코드에 그 스니펫을 복사하고,이제 "random" 토큰은 기본 알고리즘을 이해하는 모든 사람에게 예측 가능합니다. 규칙은 무뚝뚝합니다: 인간이 값을 결코 추측 할 수 없어야한다면,암호화 된 소스가 필요합니다. Toolz.dev 생성기는 그 소스로 기본 설정되며,이는 습관을 구축하는 데 더 안전한 기본값입니다.
세 번째는 범위 경계에서의 off-by-one 오류입니다. 포용적 대 배타적 엔드포인트는 숙련된 개발자도 넘어지게 됩니다. 왜냐하면 다른 언어와 다른 함수가 다른 선택을 하기 때문입니다. 100 은 제가 1 에서 100 을 요구할 때 가능한 출력인가요? 여기 정수의 경우,네, 양쪽 끝이 포함됩니다. 소수의 경우 최대값이 제외되어 부동 소수점 규칙과 일치합니다. 어떤 규칙이 적용되는지 명시적으로 명시하면 주사위가 6 을 굴리지 않는 조용한 버그를 방지할 수 있습니다. 왜냐하면 여러분이 썼기 때문입니다 < max 대신 <= max.
네 번째는 작은 표본이 무작위로 보인다고 가정하는 것입니다. 진정한 무작위성은 덩어리와 줄무늬를 생성합니다. 공정한 동전을 열 번 뒤집으면 네 개의 머리가 실행되는 것은 완전히 정상이지만 사람들은 그것을보고 동전 또는 생성기가 깨 졌다고 가정합니다. 무작위성은 짝수 간격과 동일하지 않습니다. 균등하게 간격을 둔 값을 원한다면 난수 생성기를 전혀 원하지 않으며 시퀀스를 원합니다. 실제로 필요한 것을 아는 것은 전투의 절반입니다.
자주 묻는 질문
난수 생성기는 어떻게 작동하나요?
난수 생성기는 예측할 수 없는 비트 소스를 선택한 범위에 매핑합니다. 이 도구는 Web Crypto API 가 사용 가능할 때 바이트를 읽고 최소에서 최대 간격으로 확장하므로 범위의 각 값이 그려질 확률은 동일합니다.
과연 숫자는 무작위일까?
그것들은 모든 실용적인 목적을 위해 예측할 수없는 암호 학적으로 강한 의사 난수입니다. 브라우저가 crypto.getRandomValues 를 노출 할 때 출력은 토큰과 셔플링에 적합합니다; 표준 생성기 만 사용할 수있는 경우 값은 여전히 잘 분산되어 있지만 비밀에 사용해서는 안됩니다.
반복이 없는 고유 난수를 어떻게 생성합니까?
생성하기 전에 고유 전용 옵션을 활성화하십시오. 그런 다음 도구는 교체없이 그리므로 배치의 모든 숫자는 다릅니다. 범위가 보유 할 수있는 것보다 더 많은 고유 정수를 요구하면 영원히 반복하는 대신 알려줍니다.
그것은 십진수를 생성할 수 있습니까?
예. 정수 옵션을 끄고 원하는 소수점 이하 자릿수를 설정합니다. 소수는 연속 범위의 표준 규칙인 최소값은 포함하지만 최대값은 포함하지 않는 반개방 구간에서 그려집니다.
음수를 사용할 수 있나요?
예. 음의 최소값,음의 최대값 또는 - 50 에서 50 까지와 같이 0 에 걸쳐 있는 범위를 입력합니다. 생성기는 음의 범위와 혼합 범위를 양수의 범위와 같은 방식으로 처리합니다.
한 번에 몇 개의 숫자를 생성할 수 있나요?
배치당 최대 10,000 개의 숫자. 결과에는 합계와 평균이 포함되어 있으므로 한 눈에 큰 배치를 온전하게 확인할 수 있으며 전체 목록은 개행 구분 값으로 복사됩니다.
이 난수 생성기는 무료이며 비공개입니까?
예. 가입도 없고 사용량 상한도 없이 무료이며 모든 번호가 브라우저에서 생성됩니다. 범위,개수 또는 결과가 서버로 전송되지 않습니다.
난수 생성기를 어떤 용도로 사용할 수 있나요?
일반적인 용도로는 복권이나 추첨 번호 따기,게임용 주사위 굴리기,무작위 당첨자 선택,테스트 데이터 시드 배정,분석용 행 샘플링,목록 순서 무작위 지정 등이 있습니다. 고유 전용 모드는 반복 없이 샘플링이 필요한 모든 경우를 다룹니다.



