UUIDガチャについて
【アプリ名】
UUIDガチャ
【概要】
衝突の可能性はほぼないであろうUUIDのガチャ
【言語】
【サーバー】
このアプリはUUIDを使ったガチャだ
UUIDとは
UUIDとは、全世界で2つ以上のアイテムが同じ値を持つことがない一意な識別子のこと。何らかの組織やシステムなどが管理・割り当てを行うわけではなく、誰でもいつでも自由に生成することができるが、他のUUIDと重複することは起きないようになっている。
要は、一意の値のことだ。
【引き当て】
— ほしぞら (@hoshizora1997) June 2, 2019
SQLサーバがエラー吐いてシステム止まったと思ったら「UUIDが衝突した」
そうかぁ僕が運用すると衝突するのかぁ。そうかぁ。
論理上は当たらないはずだが、当たることもあるらしい。
というわけでUUIDを衝突させるためのガチャを作りました。
ソースコードはこれ
至って簡単。最初に比較するUUIDを表示しておき、指定数分UUIDを生成し、比較する!
var objAtari = document.getElementById('win'); var atari = document.createElement('p'); var winUuid = generateUuid(); atari.innerText = winUuid; objAtari.appendChild(atari); function lottery() { var objA = document.getElementById('emission'); var getCount = document.getElementById("textbox").value; var win = false; for (var i = 0; i < getCount; i++) { var objP = document.createElement('li'); var uuid = generateUuid(); objP.innerText = uuid; objA.appendChild(objP); if(uuid == winUuid){ objP.style.backgroundColor = "red"; atari.style.backgroundColor = "red"; } } } function generateRandTen(){ return Math.floor(Math.random()*10); } function generateUuid() { let charArray = "RRRRRRRR-RRRR-4RRR-rRRR-RRRRRRRRRRRR".split(""); for (let i = 0, len = charArray.length; i < len; i++) { switch (charArray[i]) { case "R": charArray[i] = Math.floor(secureMathRandom() * 16).toString(16); break; case "r": charArray[i] = (Math.floor(secureMathRandom() * 4) + 8).toString(16); break; } } return charArray.join(""); } function secureMathRandom() { // 0から1の間の範囲に調整するためにUInt32の最大値(2^32 -1)で割る return window.crypto.getRandomValues(new Uint32Array(1))[0] / 4294967295; }
こっちにhtmlもあります。
何故javascriptで作ったかと言うと、唯一ブラウザ上で動く言語だということと、業務系の仕事からウェブ系の仕事の会社に転職するときに予習(?)として作ったものなんですね。