this answer에 :
... (계속) 두 개의 ID의 확률이에 의해 생성 기능을 충돌 , 말 그대로, 천문학 적으로 작습니다. ID의 128 비트 중 6 비트를 무작위로 생성합니다. 즉, 두 ID에 대해 1 2 ^^ 122 (또는 5.3x10 ^^ 36) 개의 가능성이 있습니다. - 충돌의 1 5,316,911,983,139,663,491,615,228,241,121,378,304에서 (5.3 undecillion) 기회 broofa
.
또한 사용자가이 uuid로 새 레코드를 만들려고 할 때 uuid가 아직 사용 중이 아닌지 확인하십시오. 이것은 사용자 입력을 신뢰하지 않는 더 큰 전략에 해당합니다. 내가 지금 Node.js를 (V8)에서 실행하고있어
function getUUID() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
return v.toString(16);
});
}
var uuids = [];
var last;
var numGenerated = 0;
do {
last = getUUID();
if (uuids.indexOf(last) === -1) {
uuids.push(last);
numGenerated++;
console.log(numGenerated);
} else {
break;
}
} while (true);
console.log('Got collision after ' + numGenerated + ' generated UUIDS.');
및 170,000 IDS 후에도 충돌 무료입니다 :
당신은 당신이 확신하지 않는 경우이 발전기를 테스트 할 수 있습니다. 편집 : 240,000.
나는 그것을 보았지만 나중에 "Math.random이 의사 난수만을 산출하는 한 확률 계산이 잘못된 것 같습니다." – herbrandson
대체 RNG가 있습니다 ... ' –
If 당신은'onmousemove' 이벤트로 마우스 움직임을 감지하는 것과 같은 것을 할 수있는 "더 무작위적인"seed를 원합니다. 그러나 사용자가 콘솔을 가져 와서 변수를 변경하여 자신의 UUID를 제출하면 사용하는 모든 기술은 쓸모가 없습니다. 궁극적으로 서버 측의 유효성을 검사해야합니다. 어쨌든 충돌을 검사하는 것이 필연적이므로 충돌이 거의없는 UUID 솔루션에 만족해야합니다. – Jackson