var uuid = function() {
var buf = new Uint32Array(4);
window.crypto.getRandomValues(buf);
var idx = -1;
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
idx++;
var r = (buf[idx>>3] >> ((idx%8)*4))&15;
var v = c == 'x' ? r : (r&0x3|0x8);
return v.toString(16);
});
};
EDIT:
Пересмотрен мой проект, который использовал эту функцию и не любил многословие. - Но нужна правильная случайность.
Версия, основанная на ответе Briguy37 и некоторых побитовых операторах, чтобы извлекать окна размером с размеру из буфера.
Следует придерживаться схемы RFC Type 4 (random) , так как у меня были проблемы с последним анализом неудовлетворительных uuids с UUID Java.