Skip to main content
🟢 Beginner

Bộ Tạo Số Ngẫu Nhiên

Tạo số ngẫu nhiên trong một khoảng cho trước. Hoàn hảo cho trò chơi, quyết định và thống kê. Máy tính toán học trực tuyến miễn phí, kết quả tức thì và chính xác.

Giới thiệu về Máy Tính Ngẫu Nhiên

Một máy tính ngẫu nhiên (RNG) là một công cụ hoặc thuật toán tạo ra các số không có bất kỳ mô hình nào — mỗi đầu ra đều độc lập thống kê so với các đầu ra trước đó, với mỗi giá trị trong khoảng đều có khả năng xuất hiện như nhau. Các số ngẫu nhiên là cơ bản cho thống kê, trò chơi, mã hóa, mô phỏng khoa học và lập trình máy tính.

Ngẫu nhiên thực sự đến từ các hiện tượng vật lý không thể dự đoán được: sự phân rã phóng xạ, tiếng ồn khí quyển, tiếng ồn nhiệt trong các mạch điện tử hoặc các sự kiện xuyên qua lượng tử. Máy tính RNG đo các hiện tượng này để tạo ra các luồng bit ngẫu nhiên thực sự. Các dịch vụ như random.org thu thập tiếng ồn khí quyển từ các máy thu sóng radio để cung cấp các số ngẫu nhiên thực sự.

Các số ngẫu nhiên được tạo ra bởi máy tính là kỹ thuật ngẫu nhiên giả — chúng là các chuỗi xác định hoàn toàn bởi một giá trị ban đầu gọi là seed. Với cùng một giá trị hạt giống, một máy tính ngẫu nhiên giả (PRNG) tạo ra chuỗi chính xác cùng nhau. Điều này thực sự hữu ích cho khả năng tái tạo trong các mô phỏng khoa học: đặt hạt giống, ghi lại nó, và bạn có thể tái tạo kết quả của mình sau này.

Cách Máy Tính Ngẫu Nhiên Giả Hợp Lưới Là Làm Thế Nào

Máy tính PRNG hiện đại sử dụng các thuật toán toán học để tạo ra các chuỗi có các tính chất thống kê xuất sắc. Thuật toán được sử dụng rộng rãi nhất là Mersenne Twister (MT19937), được phát triển bởi Matsumoto và Nishimura vào năm 1997. Nó có chu kỳ 2^19937 − 1 (số có gần 6.000 chữ số) trước khi lặp lại, vượt qua tất cả các bài kiểm tra thống kê tiêu chuẩn cho ngẫu nhiên và là máy tính ngẫu nhiên mặc định trong Python, PHP, Ruby, R và nhiều ngôn ngữ khác.

Thuật toán mới hơn bao gồm xoshiro/xoroshiro (rất nhanh, nhỏ trạng thái) và PCG (Permuted Congruential Generator) (tính chất thống kê xuất sắc với trạng thái nhỏ). Đối với các ứng dụng mã hóa, các máy tính ngẫu nhiên tiêu chuẩn này là không đủ — máy tính ngẫu nhiên an toàn mã hóa (CSPRNG) được yêu cầu vì máy tính ngẫu nhiên tiêu chuẩn có thể được dự đoán nếu một kẻ tấn công biết đủ đầu ra.

Các trình duyệt web cung cấp truy cập vào một CSPRNG thông qua API crypto.getRandomValues(), mà trình này sử dụng để tạo các số ngẫu nhiên. Điều này là đáng tin cậy hơn nhiều so với Math.random(), sử dụng một máy tính ngẫu nhiên giả và không bao giờ nên được sử dụng cho các ứng dụng nhạy cảm về bảo mật.

Thuật toánChu kỳTốc độCrypto?Sử dụng trong
Math.random()Tùy thuộc vào triển khaiRất nhanhKhôngTrình duyệt JS (không mã hóa)
Mersenne Twister2^19937 − 1NhanhKhôngPython, R, MATLAB
xoshiro256**2^256 − 1Rất nhanhKhôngRust, .NET, Julia
PCG-642^128NhanhKhôngNumPy, nhiều ngôn ngữ
ChaCha20NhanhLinux /dev/urandom, TLS
FortunaTrung bìnhmacOS, iOS, Windows

Sử Dụng Ngẫu Nhiên Trong Các Ứng Dụng

Trò chơi và Giải Trí: Xoay xổ số, trộn bài, tạo cấp độ thủ tục, hệ thống loot, ngẫu nhiên hóa hành vi NPC. Tất cả trải nghiệm của các trò chơi roguelike (Nethack, Spelunky, Hades) phụ thuộc vào ngẫu nhiên chất lượng cao mà cảm thấy công bằng nhưng khó đoán trước.

Đề thi và Raffle: Chọn ngẫu nhiên cho các giải thưởng, các cuộc thi, chọn lottos, chọn lottos, và bất kỳ phân bổ công bằng nào của một tài nguyên hạn chế giữa các đối thủ. Chọn ngẫu nhiên thực sự đảm bảo không có thiên vị.

Mô phỏng Khoa Học (Phương pháp Monte Carlo): Ngẫu nhiên tạo ra các mô phỏng Monte Carlo, sử dụng mẫu ngẫu nhiên lặp lại để ước tính kết quả toán học phức tạp. Các ứng dụng bao gồm ước tính π, định giá các chứng khoán tài chính, mô phỏng các phản ứng hạt nhân, dự báo thời tiết và nghiên cứu tương tác thuốc.

Thống kê và Nghiên Cứu: Mẫu ngẫu nhiên cho các cuộc khảo sát, phân bổ ngẫu nhiên trong các thử nghiệm lâm sàng (thử nghiệm kiểm soát ngẫu nhiên), tạo mẫu bootstrap cho các khoảng tin cậy, và kiểm tra lại trong học máy đều yêu cầu các số ngẫu nhiên.

Mã Hóa và Bảo Mật: Tạo khóa cho mã hóa, tạo mã token phiên, các thách thức CAPTCHA, các mật khẩu một lần (OTP/2FA), các giá trị muối cho mã hóa mật khẩu, và các nonce trong các giao thức mã hóa đều yêu cầu ngẫu nhiên chất lượng cao. Ngẫu nhiên yếu trong các ứng dụng mã hóa có thể gây ra các cuộc tấn công bảo mật thực tế.

Lập Trình Máy Tính: Tạo dữ liệu thử nghiệm, thử nghiệm tải, thử nghiệm mù (tìm các lỗi bằng cách cho các đầu vào ngẫu nhiên vào phần mềm), thử nghiệm A/B, trộn các thuật toán (như tính năng "trộn" của Spotify), và thử nghiệm mô phỏng.

Chính Sách Bình Đẳng và Dự Kiến Thống kê

Một máy ngẫu nhiên công bằng cho mỗi giá trị trong khoảng một xác suất bằng nhau. Đối với một khoảng 1–6 (như một con xúc xắc), mỗi số nên xuất hiện khoảng 1/6 ≈ 16,67% trong nhiều lần lăn. Nhưng trong các chuỗi ngắn, sự khác biệt là bình thường và được dự kiến — đây là điều mà xác suất thực sự nói với chúng ta.

Luật Số Lớn tuyên bố rằng khi số lượng thử nghiệm tăng lên, tần suất quan sát hội tụ đến xác suất lý thuyết. Lăn một con xúc xắc 12 lần và bạn có thể thấy {1,3,5,6,2,1,4,3,2,6,5,4} — không phải 2 lần mỗi số. Lăn nó 60.000 lần và bạn sẽ thấy rất gần 10.000 lần mỗi số. Sự hội tụ này được đảm bảo bởi luật, nhưng các mẫu ngắn không.

Thái độ Cược Sập là niềm tin sai lầm rằng kết quả quá khứ ảnh hưởng đến kết quả tương lai trong các sự kiện ngẫu nhiên độc lập. Lấy 5 đầu trong một hàng không làm cho đuôi "có nợ". Mỗi lần lật độc lập; đồng coin không có ký ức. Tương tự, một máy số ngẫu nhiên vừa sản xuất 7 không có khả năng thấp hơn để sản xuất 7 lại một lần nữa.

KhoảngXác suất mỗi Giá trịPhần Trăm Dự Kiến (mỗi 1000)Trường hợp Sử Dụng
1–250%500Simulatior Lật Coin
1–616,67%167Simulatior Lăn Xúc Xắc
1–1010%100Chọn thập phân
1–521,92%19Thùng bài
1–1001%10Phần Trăm/ sử dụng chung
1–1.000.0000,0001%0,001Simulatior Vé số

Khả Năng Ngẫu Nhiên Trong Khoa Học: Phương Pháp Monte Carlo

Phương pháp Monte Carlo sử dụng mẫu ngẫu nhiên để giải quyết các vấn đề khó phân tích hoặc không thể phân tích. Tên gọi của nó bắt nguồn từ casino Monaco (vì lý do rõ ràng), các phương pháp này biến các vấn đề xác định thành các vấn đề có xác suất có thể giải quyết bằng cách mô phỏng.

Tính toán π: Tạo ngẫu nhiên các điểm trong một hình vuông đơn vị (x,y mỗi một trong khoảng [0,1]). Số lượng điểm rơi trong hình tròn đơn vị (x² + y² ≤ 1). Tỉ lệ là π/4. Với 1 triệu điểm ngẫu nhiên, bạn có thể ước tính π đến khoảng 3-4 chữ số thập phân. Điều này không phải là cách hiệu quả để tính toán π, nhưng nó đẹp đẽ minh họa sức mạnh của ngẫu nhiên.

Phân tích Tài Chính: Giá trị Black-Scholes và Giá trị tại Rủi Ro mô phỏng hàng nghìn khả năng giá cả tương lai sử dụng các số ngẫu nhiên. Mỗi đường đi mô phỏng đại diện cho một khả năng tương lai. Phân bố kết quả trên hàng triệu mô phỏng cho phân bố xác suất của các kết quả thu nhập của danh mục.

Phát triển Thuốc: Các mô phỏng Monte Carlo mô phỏng các tương tác phân tử thuốc, dự đoán khả năng một loại thuốc tiềm năng có khả năng gắn kết với một protein mục tiêu. Điều này giảm số lượng thí nghiệm phòng thí nghiệm cần thiết, tiết kiệm hàng tỷ đô la trong phát triển dược phẩm.

Khả Năng Ngẫu Nhiên Mới (Không Lặp Lại)

Thỉnh thoảng bạn cần các số ngẫu nhiên không lặp lại — ví dụ, lộn xộn một bộ bài, phân bổ các tham gia vào các nhóm hoặc chọn các người chiến thắng vé số. Điều này được gọi là mẫu không thay thế (so với mẫu có thay thế, trong đó cùng một giá trị có thể xuất hiện nhiều lần).

Algoritme tiêu chuẩn cho điều này là thay đổi Fisher-Yates (còn được gọi là Knuth shuffle). Đối với một mảng n phần tử: bắt đầu từ phần tử cuối cùng, hoán đổi nó với một phần tử ngẫu nhiên được chọn từ mảng toàn bộ (bao gồm chính nó), sau đó di chuyển đến phần tử thứ hai, hoán đổi với một phần tử ngẫu nhiên từ những phần tử còn lại, và tiếp tục. Kết quả là một phân phối ngẫu nhiên đều trong O(n) thời gian.

Số Ngẫu Nhiên trong Quyết Định Hằng Ngày

Số ngẫu nhiên là một công cụ hữu ích bất ngờ cho các quyết định hàng ngày:

Phân định Tương Đồng: Khi có hai lựa chọn tương đương nhau, một số ngẫu nhiên có thể đưa ra quyết định mà không cần suy nghĩ quá nhiều. Nghiên cứu cho thấy khi con người suy nghĩ quá lâu về các lựa chọn thực sự tương đương nhau, họ sẽ đưa ra các thiên vị khiến họ không hài lòng với kết quả hơn nếu họ đã chọn ngẫu nhiên.

Lịch và Kế Hoạch: Lịch xoay ngẫu nhiên đảm bảo công bằng trong thời gian. Ai được chọn trước trong một cuộc đấu giá ảo, ai được chọn ca làm việc, chủ đề nào được thảo luận đầu tiên trong cuộc họp — phân bổ ngẫu nhiên loại bỏ sự thiên vị và cảm giác không công bằng.

Giáo dục và Thực hành: Học sinh sử dụng thẻ ghi nhớ lợi dụng sắp xếp ngẫu nhiên — nó ngăn chặn việc học "cảm hứng ngữ cảnh" (biết câu trả lời cho thẻ 15 vì bạn vừa trả lời thẻ 14). Sắp xếp ngẫu nhiên các bài tập thực hành là một kỹ thuật được chứng minh (thực hành xen kẽ) làm tăng cường độ bền lâu dài so với thực hành theo nhóm.

Thư Giãn Sáng Tạo: Người viết, nghệ sĩ và nhạc sĩ sử dụng các công cụ tạo số ngẫu nhiên, tạo gợi ý và các công cụ hạn chế ngẫu nhiên để vượt qua các rào cản sáng tạo. Các hạn chế được áp dụng ngẫu nhiên thường tạo ra các giải pháp sáng tạo bất ngờ và thú vị.

Câu hỏi thường gặp

Liệu máy này có thực sự ngẫu nhiên không?

Nó sử dụng API crypto.getRandomValues() của trình duyệt, đây là một máy ngẫu nhiên pseudorandom cryptographically an toàn (CSPRNG). Đối với trò chơi, quyết định, thống kê và raffle, điều này không thể phân biệt được với ngẫu nhiên thực sự. Để ngẫu nhiên tuyệt đối (từ hiện tượng vật lý), hãy sử dụng máy RNG vật lý hoặc dịch vụ như random.org.

Có thể tôi tạo số ngẫu nhiên mà không lặp lại không?

Có — điều này được gọi là lấy mẫu mà không thay thế. Máy tính sử dụng thuật toán trộn Fisher-Yates: tạo tất cả các giá trị trong khoảng, trộn chúng ngẫu nhiên, trả về N đầu tiên. Điều này đảm bảo mỗi giá trị xuất hiện ít nhất một lần và mỗi kết hợp đều có khả năng xảy ra như nhau.

Khả năng nào là khả năng nhận được cùng một số hai lần?

Với thay thế (chế độ tiêu chuẩn), cho một khoảng N giá trị, khả năng nhận được cùng một giá trị hai lần liên tiếp là 1/N. Đối với khoảng 1–100: 1% mỗi cặp. Sau nhiều lần rút, lặp lại được dự kiến và bình thường. Với "không lặp lại" chế độ, các bản sao liên tiếp là không thể theo thiết kế.

Có thể tôi sử dụng nó để chọn số số tự chọn không?

Tất nhiên. Đặt khoảng để khớp với số tự chọn của bạn (ví dụ: 1–49) và bật "không lặp lại" để chọn số độc nhất. Mỗi kết hợp đều có khả năng xảy ra như nhau — không có số hoặc kết hợp nào có khả năng xảy ra nhiều hơn hoặc ít hơn.

Thứ tự là gì trong việc tạo số ngẫu nhiên?

Thứ tự là giá trị bắt đầu cho một máy tạo số ngẫu nhiên pseudorandom. Thứ tự giống nhau luôn luôn tạo ra cùng một chuỗi. Điều này hữu ích cho các mô phỏng có thể lặp lại — đặt thứ tự, chạy mô phỏng của bạn, ghi lại thứ tự, và bạn có thể tái tạo cùng một chuỗi ngẫu nhiên sau đó để xác minh hoặc sửa lỗi.

Như thế nào để tôi chọn một mục ngẫu nhiên từ một danh sách?

Số hóa các mục từ 1 đến N, sau đó tạo một số nguyên ngẫu nhiên từ 1 đến N. Mục tương ứng là lựa chọn ngẫu nhiên của bạn. Ví dụ, để chọn ngẫu nhiên từ 7 thành viên, tạo một số nguyên ngẫu nhiên từ 1 đến 7. Mỗi người đều có khả năng xảy ra 1/7 ≈ 14,3%.

Math.random() trong JavaScript có thực sự ngẫu nhiên không?

Không. Math.random() là một PRNG đơn giản không có đảm bảo an ninh. Nó phù hợp cho trò chơi và ứng dụng không nhạy cảm nhưng không bao giờ nên được sử dụng cho mục đích an ninh (tạo khóa, token, mật khẩu). Để ứng dụng an ninh, hãy luôn sử dụng crypto.getRandomValues() hoặc một máy tạo số ngẫu nhiên CSPRNG trên máy chủ.

Khác biệt giữa PRNG và CSPRNG là gì?

PRNG (Máy tạo số ngẫu nhiên Pseudorandom) là xác định và nhanh nhưng có thể đoán trước nếu bạn biết đủ về trạng thái của nó. CSPRNG (Máy tạo số ngẫu nhiên Pseudorandom an toàn cryptographically) thêm tính chất rằng các đầu ra là không thể phân biệt được với ngẫu nhiên thực sự ngay cả khi một kẻ tấn công quan sát một số đầu ra. CSPRNGs được yêu cầu cho mật khẩu, khóa và token.

Thế nào là mô phỏng Monte Carlo?

Mô phỏng Monte Carlo sử dụng số lượng lớn các mẫu ngẫu nhiên để ước tính các đại lượng phức tạp. Ví dụ: ước tính π bằng cách đặt các điểm ngẫu nhiên trong hình vuông chứa một vòng tròn — tỷ lệ các điểm nằm trong vòng tròn đến tổng điểm hội tụ đến π/4. Các phương pháp Monte Carlo được sử dụng trong tài chính, vật lý, kỹ thuật và thống kê.

Có thể máy tạo số ngẫu nhiên bị thiên vị không?

Máy tạo số ngẫu nhiên chất lượng thấp có thể biểu hiện thiên vị — một số giá trị xuất hiện thường xuyên hơn các giá trị khác hoặc có liên quan giữa các giá trị liên tiếp. Chất lượng được đo bằng các bài kiểm tra thống kê (NIST Test Suite, TestU01 BigCrush). Các thuật toán hiện đại như Mersenne Twister, PCG và xoshiro vượt qua tất cả các bài kiểm tra tiêu chuẩn và không thiên vị cho mục đích thực tế.

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "name": "Is this generator truly random?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "It uses your browser's crypto.getRandomValues() API, which is a cryptographically secure pseudorandom number generator (CSPRNG). For games, decisions, statistics, and raffles, this is indistinguishable from true randomness. For absolute true randomness (from physical phenomena), use hardware RNGs or services like random.org."
      }
    },
    {
      "name": "Can I generate random numbers without repeats?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes — this is called sampling without replacement. The calculator uses the Fisher-Yates shuffle algorithm: generate all values in the range, shuffle them randomly, return the first N. This guarantees each value appears at most once and every combination is equally likely."
      }
    },
    {
      "name": "What is the probability of getting the same number twice?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "With replacement (standard mode), for a range of N values, the probability of getting the same value on two consecutive draws is 1/N. For range 1–100: 1% per pair. Over many draws, repetitions are expected and normal. With \"no repeats\" mode, consecutive duplicates are impossible by design."
      }
    },
    {
      "name": "Can I use this for lottery number picks?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Absolutely. Set the range to match your lottery (e.g., 1–49) and enable \"no repeats\" to pick unique numbers. Each combination is equally likely — no number or combination is more or less likely to win. The lottery itself is random, so any selection method is equally valid."
      }
    },
    {
      "name": "What is a seed in random number generation?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "A seed is the starting value for a pseudorandom number generator. The same seed always produces the same sequence. This is useful for reproducible simulations — set the seed, run your simulation, record the seed, and you can reproduce the same random sequence later for verification or debugging."
      }
    },
    {
      "name": "How do I pick a random item from a list?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Number your items 1 through N, then generate a random integer from 1 to N. The corresponding item is your random selection. For example, to randomly select from 7 team members, generate a random integer from 1 to 7. Each person has an equal 1/7 ≈ 14.3% chance of selection."
      }
    },
    {
      "name": "Is Math.random() in JavaScript truly random?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. Math.random() is a simple PRNG with no security guarantees. It is fine for games and non-sensitive applications but should never be used for cryptographic purposes (key generation, tokens, passwords). For security applications, always use crypto.getRandomValues() or a server-side CSPRNG."
      }
    },
    {
      "name": "What is the difference between a PRNG and a CSPRNG?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "A PRNG (Pseudorandom Number Generator) is deterministic and fast but predictable if you know enough about its state. A CSPRNG (Cryptographically Secure PRNG) adds the property that outputs are computationally indistinguishable from true randomness even if an attacker observes some outputs. CSPRNGs are required for passwords, keys, and tokens."
      }
    },
    {
      "name": "What is a Monte Carlo simulation?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "A Monte Carlo simulation uses large numbers of random samples to estimate complex quantities. Example: estimate π by randomly placing points in a square containing a circle — the ratio of points inside the circle to total points converges to π/4. Monte Carlo methods are used in finance, physics, engineering, and statistics."
      }
    },
    {
      "name": "Can random number generators be biased?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Poor-quality RNGs can exhibit bias — some values appearing more frequently than others, or correlations between consecutive values. Quality is measured by statistical tests (NIST Test Suite, TestU01 BigCrush). Modern algorithms like Mersenne Twister, PCG, and xoshiro pass all standard tests and are unbiased for practical purposes."
      }
    }
  ]
}

Số ngẫu nhiên trong trò chơi và tạo nội dung thủ tục

Trò chơi video được xây dựng trên ngẫu nhiên. Từ việc tạo thế giới ngẫu nhiên trong Minecraft đến trộn của hành vi AI kẻ thù, ngẫu nhiên chất lượng cao tạo ra trải nghiệm có thể chơi lại, khó đoán. Tạo nội dung thủ tục (PCG) sử dụng số ngẫu nhiên với các giới hạn toán học để tạo nội dung vĩ đại với ít nỗ lực thủ công tối thiểu — 18 tỷ hành tinh trong No Man's Sky đều được tạo thủ tục từ hạt ngẫu nhiên.

Trò chơi roguelike như Nethack, Spelunky và Hades định nghĩa thể loại thông qua tạo nội dung thủ tục. Mỗi lần chạy tạo một khu vực ngẫu nhiên, vị trí kẻ thù và phân phối vật phẩm. Trò chơi gieo hạt ngẫu nhiên để các lần chạy cảm thấy công bằng (RNG không quyết định ngẫu nhiên bạn chết ngay lập tức) trong khi vẫn khó đoán. Nhiều trò chơi roguelike hiển thị hạt ngẫu nhiên để người chơi có thể chơi lại một lần chạy giống hoặc chia sẻ hạt ngẫu nhiên thú vị với người khác.

Trò chơi bàn đã sử dụng ngẫu nhiên vật lý (cược, thẻ lộn xộn, quay) trong nhiều thế kỷ. Tương đương số học tập số học phải sao chép các phân phối chính xác. Một lần ném một con xúc xắc tiêu chuẩn sử dụng phân phối đều đặn trên {1,2,3,4,5,6}. Một lần rút từ một bộ thẻ lộn xộn sử dụng phân phối ngẫu nhiên sắp xếp. Một số trò chơi sử dụng bể cược (ném nhiều xúc xắc, lấy số cao nhất) hoặc xúc xắc có lợi thế / bất lợi — yêu cầu thiết kế thống kê cẩn thận để đạt được phân phối xác suất mong muốn.

Tạo các phân phối khác từ số ngẫu nhiên đều

Nhiều RNG sản xuất số ngẫu nhiên đều đặn giữa 0 và 1 (hoặc số nguyên trong một phạm vi). Thỉnh thoảng chúng ta cần số ngẫu nhiên tuân theo các phân phối khác — bình thường, exponent, Poisson, v.v. Những thứ này có thể được chuyển đổi từ số ngẫu nhiên đều đặn bằng phương pháp chuyển đổi.

Phương pháp Box-Muller tạo ra các số ngẫu nhiên bình thường theo phân phối từ hai số ngẫu nhiên đều đặn U₁ và U₂: Z₁ = √(−2ln(U₁)) × cos(2πU₂) và Z₂ = √(−2ln(U₁)) × sin(2πU₂). Cả Z₁ và Z₂ đều theo phân phối chuẩn N(0,1). Kích thước với Z × σ + μ để có N(μ,σ²).

Phương pháp Chuyển đổi nghịch đảo sử dụng nghịch đảo của hàm phân phối tích lũy (CDF). Đối với phân phối exponent với tốc độ λ: X = −ln(1−U)/λ ở đâu U là đều đặn trong [0,1]. Phương pháp này trực tiếp chuyển đổi một biến ngẫu nhiên đều đặn thành một biến ngẫu nhiên theo phân phối exponent. Phương pháp này hoạt động cho bất kỳ phân phối nào có CDF có thể đảo ngược được.

Thử nghiệm thống kê cho ngẫu nhiên

Cách nào để chúng ta xác minh một máy tạo số ngẫu nhiên thực sự ngẫu nhiên? Các thử nghiệm thống kê kiểm tra xem một chuỗi số liệu có thể hiện các mẫu mà không thể xảy ra trong một chuỗi ngẫu nhiên thực sự. Bộ thử nghiệm thống kê của NIST chứa 15 thử nghiệm được sử dụng để đánh giá các máy tạo số ngẫu nhiên (RNG) cho các ứng dụng mã hóa. Các thử nghiệm chính bao gồm:

Thử nghiệm tần suất (Monobit): Kiểm tra xem 0 và 1 xuất hiện với tần suất bằng nhau trong biểu diễn nhị phân của các số được tạo ra. Một đồng tiền có xu hướng nghiêng 60% sẽ thất bại trong thử nghiệm này.

Thử nghiệm chạy: Kiểm tra số lượng bit liên tiếp giống nhau (chạy). Có quá nhiều chạy dài của cùng một bit cho thấy một mẫu không ngẫu nhiên. Một chuỗi ngẫu nhiên thực sự có phân phối dự đoán được của các chiều dài chạy.

Thử nghiệm liên tiếp: Kiểm tra xem các cặp, ba hoặc bốn giá trị có tần suất bằng nhau hay không. Nếu máy tạo số tạo ra chuỗi 1,2,3,4,5,6,1,2,3,4,5,6... nó sẽ vượt qua thử nghiệm tần suất nhưng thất bại trong thử nghiệm liên tiếp — các cặp là không ngẫu nhiên.

Thử nghiệm thống kêĐiều gì nó phát hiệnNIST Test Suite?
Thử nghiệm tần suất (Monobit)Tần suất không đều 0/1
Thử nghiệm chạyChạy quá nhiều/few liên tiếp giống nhau
AutocorrelationGiá trị có liên quan với các giá trị trước đó
Chi-SquarePhân phối không đềuCó (thử nghiệm tần suất)
Birthday SpacingPhân cách giữa các giá trị đều đặnQua TestU01
DiehardNhiều thử nghiệm mẫuSuite riêng biệt

Thử nghiệm "BigCrush" của TestU01 được coi là thử nghiệm nghiêm ngặt nhất có thể thực hiện được — nó chạy 106 thử nghiệm và từ chối nhiều thuật toán mà vượt qua các bộ thử nghiệm nhỏ hơn. Các thuật toán hiện đại như PCG và xoshiro vượt qua BigCrush; các thuật toán cũ như máy tạo số tuyến tính tương thích dùng trong các thư viện C cũ thất bại trong nhiều thử nghiệm và không nên được sử dụng cho các ứng dụng chất lượng.

Sử dụng Máy tạo số ngẫu nhiên này

Đặt giá trị tối thiểu và tối đa để định nghĩa phạm vi của bạn. Đặt "số lượng" để tạo nhiều số cùng một lúc. Bật tùy chọn "không lặp lại" để tạo một danh sách các số duy nhất (mẫu chọn không thay thế) — lý tưởng cho các lựa chọn số may mắn, rút thăm thẻ hoặc phân bổ các tham gia không lặp lại. Chuỗi được tạo sử dụng API ngẫu nhiên mã hóa của trình duyệt của bạn để có kết quả chất lượng cao phù hợp cho bất kỳ mục đích không an ninh nào. Để sử dụng số may mắn, tạo số lượng số bằng số lượng cần chọn trong phạm vi của bạn. Để sử dụng raffle, gán các số thứ tự liên tiếp cho các tham gia và rút số tương ứng. Kết quả được tạo lại mỗi lần bạn nhấp vào nút — kết quả trước đó không được lưu trữ hoặc theo dõi.