エビフライの唐揚げ

今までのことや、技術的なこと、その他を書いていこうと思います。

UUIDガチャについて

【アプリ名】
UUIDガチャ
【概要】
衝突の可能性はほぼないであろうUUIDのガチャ

JavaScriptTest

 

【言語】

javascript

【サーバー】

GitHub(GitHub Pages)

 

 

このアプリはUUIDを使ったガチャだ

 

UUIDとは

UUIDとは、全世界で2つ以上のアイテムが同じ値を持つことがない一意な識別子のこと。何らかの組織やシステムなどが管理・割り当てを行うわけではなく、誰でもいつでも自由に生成することができるが、他のUUIDと重複することは起きないようになっている。

引用元:http://e-words.jp/

要は、一意の値のことだ。

 

 

論理上は当たらないはずだが、当たることもあるらしい。

 

というわけで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もあります。

github.com


 

何故javascriptで作ったかと言うと、唯一ブラウザ上で動く言語だということと、業務系の仕事からウェブ系の仕事の会社に転職するときに予習(?)として作ったものなんですね。