私はリモートWebサービスと統合/テストしており、それが「QA」エンドポイントであるにもかかわらず、every呼び出しで一意のメールアドレスを強制します。
_DateTime.Now.Ticks
_(例:634970372342724417)とGuid.NewGuid()
を考えることができますが、どちらもmax。 20文字(またはできますか?)。
最後に使用した数値を含む数値をファイルに書き出してから_[email protected], [email protected], etc...
_を使用するのはそれほど難しいことではないと思いますが、状態の持続を回避できる場合は常に使用します。
誰かが私が最大長20文字の(最大長のguid)= 14 = 20-「@ x.com」の長さ?
同じ「ティック」で2つの電子メールアドレスを生成しないと想定している場合は、ティックを使用して電子メールアドレスを生成できます。
ただし、ティックが64ビットの数値であり、その数値を書き出すと、20文字を超えることになります。
トリックは、別のスキームを使用して64ビットの数値をエンコードすることです。西部のアルファベット+ 10桁の26文字を使用できると仮定します。これは36の可能な文字になります。 5ビットを取ると、32文字を表すことができます。それで十分でしょう。 64ビットを5ビットのグループに分割します(64/5は約13グループです)。 5ビットごとに1文字に変換します。これにより、最終的に13文字になりますが、その前に文字を追加することができます)。
long ticks = DateTime.Now.Ticks;
byte[] bytes = BitConverter.GetBytes(ticks);
string id = Convert.ToBase64String(bytes)
.Replace('+', '_')
.Replace('/', '-')
.TrimEnd('=');
Console.WriteLine (id);
収量:
Gq1rNzbezwg
各呼び出しの間に少なくとも1秒を指定したため、これは機能するはずです。
DateTime.Now.ToString("yyyyMMddHHmmss");
そのちょうど14文字。
日時から次の数字を取得すると、それを機能させることができるはずです...次のようなもの:
DateTime.Now.ToString("yyMMddHHmmssff");
これは16文字で、必要に応じて4を他のプレフィックスに残します。
したがって、2013年2月21日の約10:21は「130321102142」となり、次は「130321102169」となります。
日時のフォーマットの詳細については、 http://msdn.Microsoft.com/en-us/library/zdtaw1bw.aspx を参照してください。
/// <summary>
/// Get a unique reference number.
/// </summary>
/// <returns></returns>
public string GetUniqueReferenceNumber(char firstChar)
{
var ticks = DateTime.Now.Ticks;
var ticksString = ticks.ToString();
var ticksSubString = ticksString.Substring((ticksString.Length - 15 > 0) ? ticksString.Length - 15 : 0);
if (this.currentTicks.Equals(ticks))
{
this.currentReference++;
if (this.currentReference >= 9999)
{
// Only when there are very fast computers.
System.Threading.Thread.Sleep(1);
}
return (firstChar + ticksSubString + this.currentReference.ToString("D4")).PadRight(20, '9');
}
this.currentReference = -1;
this.currentTicks = ticks;
return (firstChar + ticksSubString).PadRight(20, '9');
}
私の場合、一意の最初の文字と最大20文字の一意の参照番号を作成する必要がありました。多分あなたは以下の関数を使うことができます、それはあなたが1ティック内で9999のユニークな数を作成することを可能にします。 (ゼロを含む)
もちろん、最初の文字と最大文字数20なしで独自の実装を作成できます。
追加するだけです...ティックからの数値のみを使用したい場合は、substring
を使用することができます。次に例を示します。
int onlyThisAmount = 20;
string ticks = DateTime.Now.Ticks.ToString();
ticks = ticks.Substring(ticks.Length - onlyThisAmount);