Global unikal identifikator

Vikipediya, azad ensiklopediya
Naviqasiyaya keç Axtarışa keç

GUID (Global unikal identifikator) (ing. Globally Unique Identifier) — 128-bitlik unikal identifikator. Onun başlıca özəlliyi, üst-üstə düşmə səbəbindən yaranan toqquşmalar təhlükəsindən çəkinmədən genişlənən servislər və tətbiqi proqramlar yaratmağa imkan verən bənzərsizlikdir. Hər bir ayrıca GUID üçün unikallığa zəmanət verilməsə də, bənzərsiz açarların ümumi sayı o qədər böyükdür ki, (2128 və ya 3.4028×1038) dünyada bir-birindən asılı olmadan üst-üstə düşən iki açarın generasiya olunması ehtimalı son dərəcə azdır. Bununla belə, üst-üstə düşmə halı olmuşdur: Windows 95 əməliyyat sistemində DOS-proqramların (.pif) və ZipMagic 2000 proqramının başlatma simgəsinin GUID-ləri üstə-üstə düşmüşdür.

Mətndə GUID defislərlə qruplara bölünmüş və fiqurlu mötərizəyə alınmış 32 ədəd onaltılıq rəqəmdən ibarət sətir şəklində yazılır. Məsələn:

{6F9619FF-8B86-D011-B42D-00CF4FC964FF}

Java proqramlaşdırma dilinin ehtimalını hesablamaq üçün proqram:

public void probabilityCoincidenceGUID()
{ 
    MathContext mc = new MathContext(1000, RoundingMode.HALF_UP);
    BigDecimal N = BigDecimal.valueOf(2).pow(128, mc);
    BigDecimal n = BigDecimal.valueOf(2).pow(50, mc);
    BigDecimal result_ = calcProbabilityCoincidenceGUID(N, n, mc);
    double result = result_.doubleValue();
} 
    
private BigDecimal calcProbabilityCoincidenceGUID(BigDecimal N, BigDecimal n, MathContext mc)
{ 
    BigDecimal N_1 = N.subtract(BigDecimal.valueOf(1), mc);
    BigDecimal N_n = N.subtract(n, mc);
    BigDecimal ln_N = BigDecimalUtils.ln(N, 400);
    BigDecimal ln_N_1 = BigDecimalUtils.ln(N_1, 400);
    BigDecimal ln_N_n = BigDecimalUtils.ln(N_n, 400);
    BigDecimal v1 = N.multiply(ln_N_1.subtract(ln_N_n, mc), mc);
    BigDecimal v2 = n.multiply(ln_N_n.subtract(ln_N, mc).subtract(BigDecimal.valueOf(1), mc), mc);
    BigDecimal v3 = ln_N_1.subtract(ln_N, mc).subtract(BigDecimal.valueOf(1), mc);
    BigDecimal exp = v1.add(v2, mc).subtract(v3, mc);
    BigDecimal result = BigDecimal.valueOf(1).subtract(BigDecimalUtils.exp(exp, 400));
    return result;
}