Saya memutuskan untuk melakukan proyek hewan peliharaan saya sendiri untuk akuntansi buku yang telah dibaca di PWA. Taklukkan teknologi baru dan semua itu. Perhitungannya adalah saya akan mempostingnya dan menginstalnya di ponsel saya, dan sekarang saya memiliki aplikasi seluler yang dapat digunakan secara offline. Saya ingin membuat UUID untuk menyimpan buku kerja, bukan menemukan API. Saya mengusulkan untuk mencari tahu mengapa.
Apa itu UUID
UUID adalah standar identifikasi data yang digunakan terutama untuk sistem terdistribusi. Tugasnya adalah mengaktifkan pembuatan kunci yang tidak akan menyebabkan konflik saat disimpan ke penyimpanan data tertentu.
UUID adalah angka 16-byte dalam format HEX:
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
Dimana:
x - [0 - f] ( ) M - [0 - 5] ( UUID) N - [8 - b] ( UUID)
Di sini saya tidak akan menjelaskan secara rinci apa artinya ini. Anda dapat membiasakan diri dengan ini secara mendetail di Wikipedia .
Cara untuk menghasilkan UUID

Semua metode untuk menghasilkan UUID bermuara pada fakta bahwa kami mengambil data unik klien, menjalankannya melalui fungsi hash dan mendapatkan kunci 128-bit kami.
Versi 1 dan 2 menggunakan waktu dengan akurasi 0,1 mikrodetik + alamat MAC, yang memastikan bahwa hampir tidak ada cara untuk mendapatkan duplikat. Untuk sepenuhnya menyelesaikan probabilitas ini, versi pertama menambahkan salt acak, dan yang kedua tidak melakukan apa-apa (kami tidak menyukai versi kedua, versi ini hanya dapat menghasilkan 64 id unik dalam tujuh menit).
3 5 (Url, FQDN, OID) + . UUID .
3 5 , 3 MD-5, 5 β SHA-1.
4 Β―_(γ)_/Β―.
JS
MAC- , IP, - .
, file- , , . , UUID . .
: , , :

import * as console from 'console'; console.run('rm -rf /**/kursach*final-(\d+)?.docx')
.
, .
. β . β UUID . , ID , , .
, PWA, 2007 . , PWA , , . ( Play Market PWA , ...). , PWA ? .
β API getUUID()
, ? , 99 100 - .
.
.
, UUID 100 .
1 , ( performance.now()
), .
.
HTML Living Standard The Navigator object.
,
| appCodeName | appName | platform | βproduct | productSub | vendor | vendorSub | |
|---|---|---|---|---|---|---|---|
| Chrome | Mozilla | Netscape | Win32 | Gecko | 20030107 | Google Inc. | - |
| Mozilla 75 | Mozilla | Netscape | Win32 | Gecko | 20100101 | - | - |
| Mozilla 45 | Mozilla | Netscape | Win32 | Gecko | 20100101 | - | - |
| Internet Explorer | Mozilla | Netscape | Win32 | Gecko | - | - | - |
| Microsoft Edge | Mozilla | Netscape | Win32 | Gecko | 20030107 | Google Inc. | - |
? ? .
, userAgent
appVersion
:
| appVersion | userAgent | |
|---|---|---|
| Chrome | 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 |
| Mozilla 75 | 5.0 (Windows) | Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0 |
| Mozilla 45 | 5.0 (Windows) | Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0 |
| Internet Explorer | 5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0; Zoom 3.6.0; rv:11.0) like Gecko | Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0; Zoom 3.6.0; rv:11.0) like Gecko |
| Microsoft Edge | 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.74 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.74 |
Edge , IP, . Edge. , , .

.
- . .
- .
6 16 timestamp', 10889-08-0210:31:50.655
. .
6 SHA-1 β 281,474,976,710,656 ( , ). ( 30).
1 (M) (N).
3 .
:
- 100,000 100 , :
$$
100,000 * 100 / 60,000 = 166
$$
, :
$$
166 1/256^3 1/256^5 = 166 1/255^8 = 166 / 18 10^{18}
$$
" ?"
Ya, ada kode legendaris
function uuidv4() { 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); }); }
Dalam kasus saya di backend, UUID digunakan sebagai .
Jika byte pertama dari kunci tersebut berurutan, kemungkinan besar record baru akan muncul di akhir tabel. Bahkan jika sinkronisasi dimulai pada klien. Bagaimanapun, kecil kemungkinan bahwa pengguna akan menyinkronkan data yang dimasukkan enam bulan lalu dan DBMS akan menggeser setengah dari tabel.
Dalam kasus keacakan, data akan dimasukkan ke dalam pelat di mana pun ia mendapatkannya.