當我們想要獲得乙個唯一的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...