Quay số minh bạch API

Chọn người trúng thưởng từ danh sách hoặc dãy số bằng cơ chế cam kết: công bố mã băm seed trước, quay với salt công khai, ai cũng kiểm tra lại được.

GETPOSThttps://apibox.io.vn/v1/random-draw
Tiện ích lập trình▶ Dùng thử online

Quay số mà người xem kiểm tra lại được, dùng cho minigame livestream, tặng quà theo bình luận, bốc thăm may mắn. 1) action=commit tạo seed bí mật (hoặc dùng seed của bạn) và trả commitment là SHA-256 của seed: công bố commitment trước sự kiện và chốt danh sách tham gia. 2) action=draw với seed, danh sách (mỗi dòng một người, hoặc [{"name","weight"}]) hoặc dãy số min / max, và một salt công khai chọn lúc quay (số bình luận, kết quả xổ số…) trả về người trúng và người dự phòng. 3) Công bố seed: action=verify cho bất kỳ ai tính lại kết quả và đối chiếu SHA-256(seed) với commitment.

Người trúng được chọn bằng HMAC-SHA256 với khóa là seed trên salt và mã băm của danh sách, lấy mẫu loại bỏ (không lệch do chia lấy dư) và xáo trộn Fisher-Yates một phần, nên không ai đổi được kết quả sau khi đã công bố commitment và người tổ chức không điều khiển được khi salt đã công khai. Tên trùng mặc định bị loại (unique_entries=false để giữ, tính thêm lượt), trọng số cho cơ hội theo tỷ lệ, reserve để quay thêm người dự phòng.

Thuật toán đầy đủ được trả kèm mỗi lần quay để có thể tự viết lại và kiểm tra độc lập. Chương trình khuyến mại có giải thưởng tại Việt Nam vẫn phải tuân thủ quy định về khuyến mại (đăng ký / thông báo): API chỉ là công cụ quay số.

Tham số

TênVị tríKiểuBắt buộcMặc định
actionpath|body|querystringkhôngcommitcommit, draw hoặc verify (hoặc theo đường dẫn: /v1/random-draw/draw).
seedbody|querystringkhôngSeed bí mật (do commit tạo; tối thiểu 16 ký tự).
entriesbodystringkhôngMỗi dòng một người, hoặc mảng tên / {"name","weight"}.
minbody|querynumberkhông1Quay trong dãy số thay cho danh sách (cùng max).
maxbody|querynumberkhôngSố lớn nhất của dãy.
saltbody|querystringkhôngGiá trị công khai chốt lúc quay (số bình luận, kết quả xổ số…).
winnersbody|querynumberkhông1Số người trúng.
reservebody|querynumberkhông0Số người dự phòng quay thêm.
commitmentbody|querystringkhôngverify: commitment đã công bố.
claimed_winnersbodyarraykhôngverify: danh sách người trúng đã công bố, theo thứ tự.

Ví dụ

curl -X POST "https://apibox.io.vn/v1/random-draw/draw" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"seed":"a3f1c9e07b5d2486a3f1c9e07b5d2486","entries":"Nguyễn An\nTrần Bình\nLê Chi\nPhạm Dũng\nHoàng Em","salt":"1532","winners":2,"reserve":1}'

Kết quả trả về

{
  "kind": "list",
  "seed": "a3f1c9e07b5d2486a3f1c9e07b5d2486",
  "commitment": "af24c17ea9f89cc17d2b578b1f965de883c5596b31bb34cdac7077bdc8357696",
  "salt": "1532",
  "entries_count": 5,
  "entries_hash": "4c2ecdb5ece276bb6836ad66df15956d19156d10df68e800ed2f62f6bba74b74",
  "weighted": false,
  "unique_entries": true,
  "winners": [
    {
      "rank": 1,
      "entry": "Hoàng Em",
      "index": 5
    },
    {
      "rank": 2,
      "entry": "Nguyễn An",
      "index": 1
    }
  ],
  "reserves": [
    {
      "rank": 3,
      "entry": "Lê Chi",
      "index": 3
    }
  ],
  "algorithm": "random-draw/v1: entries = trimmed non-empty lines in order (with unique_entries, later case-insensitive duplicates are dropped); entries_hash = SHA-256(entries joined by \"\\n\", each as \"label<TAB>weight\" when weights are used); stream = HMAC-SHA256(key = seed, \"random-draw/v1|\" + salt + \"|\" + entries_hash + \"|\" + counter) as 32-bit big-endian words; index = rejection sampling below n; winners = partial Fisher-Yates (weighted: cumulative integer weights, removed once drawn).",
  "drawn_at": "2026-11-11T03:18:50.167Z",
  "verify": "POST /v1/random-draw/verify with the same seed, salt, entries (or min / max), winners and the commitment"
}

Ứng dụng

  • Chọn người trúng thưởng từ bình luận livestream Facebook, TikTok
  • Quay số may mắn tiệc tất niên công ty có kiểm chứng
  • Bốc số vé trong một dãy số
  • Chia nhóm, xếp thứ tự ngẫu nhiên trong lớp học có bằng chứng

Hỏi đáp

Vì sao kết quả minh bạch?

Seed đã được cố định bằng commitment công bố trước khi chốt danh sách, còn salt công khai chỉ biết lúc quay, nên không bên nào chọn được kết quả; ai cũng tính lại được từ seed đã công bố.

Seed có được lưu trên máy chủ không?

Không. API không lưu trạng thái: hãy giữ bí mật seed đến lúc quay rồi công bố. Không có seed thì commitment không tiết lộ gì.

Có cho một người nhiều lượt được không?

Có: gửi danh sách dạng [{"name":"An","weight":3}], hoặc đặt unique_entries=false để dòng trùng được tính nhiều vé.

API liên quan

Bắt đầu với 1.000 request miễn phí mỗi tháng. Nhận API key miễn phí →