GUID 字串,16位字串,19位數字

2022-02-12 13:23:51 字數 4832 閱讀 4546

當我們想要獲得乙個唯一的key的時候,通常會想到guid。這個key非常的長,雖然我們在很多情況下這並不是個問題。但是當我們需要將這個36個字元的字串放在url中時,會使的url非常的醜陋。

想要縮短guid的長度而不犧牲它的唯一性是不可能的,但是如果我們能夠接受乙個16位的字串的話是可以做出這個犧牲的。

我們可以將乙個標準的guid 21726045-e8f7-4b09-abd8-4bcc926e9e28  轉換成短的字串 3c4ebc5f5f2c4edc

下面的方法會生成乙個短的字串,並且這個字串是唯一的。重複1億次都不會出現重複的,它也是依照guid的唯一性來生成這個字串的。

private string generatestringid()

return string.format("", i - datetime.now.ticks);

}如果你想生成乙個數字序列而不是字串,你將會獲得乙個19位長的序列。下面的方法會把guid轉換為int64的數字序列。

private long generateintid()

1)假設資料庫是這個樣子的:

2)執行以下控制台**:

static void main(string args)

} 3)結果如下:

當我們想要獲得乙個唯一的key的時候,通常會想到guid。這個key的長度是36位,如果將這個36為的字串儲存或是用url傳遞的時候就會感覺非常的難看。

就算去掉-分隔符也有32位,如 eaa82b2da9ea4e5b95330baf9944fb35,如果轉為數字序列 如將guid轉為int64數字序列,長度也會有19位。

如byte buffer = guid.newguid().tobytearray();  

long long_guid=bitconverter.toint64(buffer, 0);

這樣就會得到乙個類似於  5472976187161141196 的19位長度的 數字序列。

如果我們將 5472976187161141196 分解為 54 72 97 61 87 161 141 196,應該可以用8個字元就可以顯示,但會有一部分是不可顯示的字元。

如果將這8個字元轉為base64,發現只需要10-14個為就能顯示完畢,將一些url用到的某些符號剔除,通常會產生12位的編碼較多,10位的編碼較少。

經過100萬次的測試,沒有發現會有重複的字元產生,不知道是否是完美的將guid 壓縮為12位的方法呢?

附源**

public

static

string

uuid()

else

if((i+3

)<

_value.length)}p

++;i=

i+fix;

}byte

buf2

=new

byte

[p];

for(

inti=0

;i<

p;i++

)string

crtn

=system.convert.tobase64string(buf2);

if(crtn

==null

)crtn

=crtn.tolower();

crtn

=crtn.replace("/

","");

crtn

=crtn.replace("+

","");

crtn

=crtn.replace("=

","");

if(crtn.length

==12

) else

複製**

當我們想要獲得乙個唯一的key的時候,通常會想到guid。這個key非常的長,雖然我們在很多情況下這並不是個問題。但是當我們需要將這個36個字元的字串放在url中時,會使的url非常的醜陋。

想要縮短guid的長度而不犧牲它的唯一性是不可能的,但是如果我們能夠接受乙個16位的字串的話是可以做出這個犧牲的。

我們可以將乙個標準的guid 21726045-e8f7-4b09-abd8-4bcc926e9e28  轉換成短的字串 3c4ebc5f5f2c4edc

下面的方法會生成乙個短的字串,並且這個字串是唯一的。重複1億次都不會出現重複的,它也是依照guid的唯一性來生成這個字串的。

private string generatestringid()

return string.format("", i - datetime.now.ticks);

}如果你想生成乙個數字序列而不是字串,你將會獲得乙個19位長的序列。下面的方法會把guid轉換為int64的數字序列。

private long generateintid()

1)假設資料庫是這個樣子的:

2)執行以下控制台**:

static void main(string args)

} 3)結果如下:

當我們想要獲得乙個唯一的key的時候,通常會想到guid。這個key的長度是36位,如果將這個36為的字串儲存或是用url傳遞的時候就會感覺非常的難看。

就算去掉-分隔符也有32位,如 eaa82b2da9ea4e5b95330baf9944fb35,如果轉為數字序列 如將guid轉為int64數字序列,長度也會有19位。

如byte buffer = guid.newguid().tobytearray();  

long long_guid=bitconverter.toint64(buffer, 0);

這樣就會得到乙個類似於  5472976187161141196 的19位長度的 數字序列。

如果我們將 5472976187161141196 分解為 54 72 97 61 87 161 141 196,應該可以用8個字元就可以顯示,但會有一部分是不可顯示的字元。

如果將這8個字元轉為base64,發現只需要10-14個為就能顯示完畢,將一些url用到的某些符號剔除,通常會產生12位的編碼較多,10位的編碼較少。

經過100萬次的測試,沒有發現會有重複的字元產生,不知道是否是完美的將guid 壓縮為12位的方法呢?

附源**

public

static

string

uuid()

else

if((i+3

)<

_value.length)}p

++;i=

i+fix;

}byte

buf2

=new

byte

[p];

for(

inti=0

;i<

p;i++

)string

crtn

=system.convert.tobase64string(buf2);

if(crtn

==null

)crtn

=crtn.tolower();

crtn

=crtn.replace("/

","");

crtn

=crtn.replace("+

","");

crtn

=crtn.replace("=

","");

if(crtn.length

==12

) else

複製**

當我們想要獲得乙個唯一的key的時候,通常會想到guid。這個key的長度是36位,如果將這個36為的字串儲存或是用url傳遞的時候就會感覺非常的難看。

就算去掉-分隔符也有32位,如 eaa82b2da9ea4e5b95330baf9944fb35,如果轉為數字序列 如將guid轉為int64數字序列,長度也會有19位。

如byte buffer = guid.newguid().tobytearray();  

long long_guid=bitconverter.toint64(buffer, 0);

這樣就會得到乙個類似於  5472976187161141196 的19位長度的 數字序列。

如果我們將 5472976187161141196 分解為 54 72 97 61 87 161 141 196,應該可以用8個字元就可以顯示,但會有一部分是不可顯示的字元。

如果將這8個字元轉為base64,發現只需要10-14個為就能顯示完畢,將一些url用到的某些符號剔除,通常會產生12位的編碼較多,10位的編碼較少。

經過100萬次的測試,沒有發現會有重複的字元產生,不知道是否是完美的將guid 壓縮為12位的方法呢?

附源**

public

static

string

uuid()

else

if((i+3

)<

_value.length)}p

++;i=

i+fix;

}byte

buf2

=new

byte

[p];

for(

inti=0

;i<

p;i++

)string

crtn

=system.convert.tobase64string(buf2);

if(crtn

==null

)crtn

=crtn.tolower();

crtn

=crtn.replace("/

","");

crtn

=crtn.replace("+

","");

crtn

=crtn.replace("=

","");

if(crtn.length

==12

) else

複製**

GUID轉換成16位字串或19位唯一字串

根據guid獲取16位的唯一字串 author 付義方 public static string guidto16string i datetime.now.ticks 根據guid獲取19位的唯一數字序列 author 付義方 public static long guidtolongid 生成2...

GUID轉換成16位字串或19位唯一字串

整理幾個常用guid轉換成16位字串或19位唯一字串方法 根據guid獲取16位的唯一字串 author 付義方 public static string guidto16string i datetime.now.ticks 根據guid獲取19位的唯一數字序列 author 付義方 public...

1 6 字串壓縮

c code intcomputecompressedlength const string s return compressedlength string stringcompression const string s std string compressed compressedlengt...