2012-01-12 14 views
4

これは可能ですか、または32バイト未満のGUIDを取得するためのオーバーロードがありますか? は現在、私はこの文を使用していますが、その私は私はあなたがShortGuidを使用することができ、20文字GUIDの文字数を制限する

+1

文字数が少ない場合はGUIDではありません。それは他のあまりランダムでない値かもしれません。 –

+0

この答えをチェックして、Ascii85エンコーディングを使用して20文字まで取得してください:http://stackoverflow.com/a/3247983/945456 –

+0

GUIDを使用するか、20文字の値を使用しますか?彼らは同じではありません。 –

答えて

3

のキーが欲しい

string guid = new Guid("{dddd-dddd-dddd-dddd}").ToString(); 

エラーを与えます。実装のHere is an example

URLやエンドユーザーに見える他の場所でShortGuidsを使用するとよいです。

次のコード:

Guid guid = Guid.NewGuid(); 
ShortGuid sguid1 = guid; // implicitly cast the guid as a shortguid 
Console.WriteLine(sguid1); 
Console.WriteLine(sguid1.Guid); 

はあなたに、この出力を与える:

FEx1sZbSD0ugmgMAF_RGHw 
b1754c14-d296-4b0f-a09a-030017f4461f 

これは、エンコードとデコードメソッドのコードです:

public static string Encode(Guid guid) 
{ 
    string encoded = Convert.ToBase64String(guid.ToByteArray()); 
    encoded = encoded 
    .Replace("/", "_") 
    .Replace("+", "-"); 
    return encoded.Substring(0, 22); 
} 

public static Guid Decode(string value) 
{ 
    value = value 
    .Replace("_", "/") 
    .Replace("-", "+"); 
    byte[] buffer = Convert.FromBase64String(value + "=="); 
    return new Guid(buffer); 
} 
+0

これは22文字です。彼は20文字を望んでいるとの質問がある。これらをオフにするには、BASE64からASCII85までステップアップする必要があります。ダビデの答えを見てください。 – Travis

関連する問題