ソースを参照

uuid is now 22 char base64 encoded

David Sehnal 6 年 前
コミット
504d6f25a1
1 ファイル変更12 行追加6 行削除
  1. 12 6
      src/mol-util/uuid.ts

+ 12 - 6
src/mol-util/uuid.ts

@@ -9,14 +9,20 @@ import { now } from 'mol-util/now';
 type UUID = string & { '@type': 'uuid' }
 
 namespace UUID {
+    const chars: string[] = [];
     export function create(): UUID {
         let d = (+new Date()) + now();
-        const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
-            const r = (d + Math.random()*16)%16 | 0;
-            d = Math.floor(d/16);
-            return (c==='x' ? r : (r&0x3|0x8)).toString(16);
-        });
-        return uuid as any;
+        for (let i = 0; i < 16; i++) {
+            chars[i] = String.fromCharCode((d + Math.random()*0xff)%0xff | 0);
+            d = Math.floor(d/0xff);
+        }
+        return btoa(chars.join('')).substr(0, 22) as UUID;
+        // const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+        //     const r = (d + Math.random()*16)%16 | 0;
+        //     d = Math.floor(d/16);
+        //     return (c==='x' ? r : (r&0x3|0x8)).toString(16);
+        // });
+        // return uuid as any;
     }
 }