16

リモートWebサービスと統合/テストしています。これは「QA」エンドポイントですが、すべての呼び出しで一意の電子メールアドレスを適用します。

私はDateTime.Now.Ticks(例えば634970372342724417)とを考えることができますGuid.NewGuid()が、それらのどちらも最大で電子メールに合体することはできません。20文字(またはできますか?)

最後に使用した番号を含む番号をファイルに書き込んでから使用するのはそれほど難しいことではないと思いますemail1@x.com, email2@x.com, etc...が、状態が持続するのを避けることができれば、常にそうします。

最大長20文字の電子メールアドレス(最大長guid)= 14 =20-「@x.com」の長さ?

4

5 に答える 5

24

同じ「ティック」で2つの電子メールアドレスを生成しないと想定する場合は、実際にティックを使用して電子メールアドレスを生成できます。

ただし、ティックが64ビットの数値であり、その数値を書き出すと、20文字を超えることになります。

秘訣は、別のスキームを使用して64ビット番号をエンコードすることです。西部アルファベットの26文字+10桁を使用できると仮定します。これにより、36文字が可能になります。5ビットを取ると、32文字を表すことができます。それで十分なはずです。64ビットを取り、それらを5ビットのグループに分割します(64/5は約13グループです)。5ビットごとに1文字に変換します。そうすれば、最終的に13文字になり、その前に1文字を追加できます)。

long ticks = DateTime.Now.Ticks;
byte[] bytes = BitConverter.GetBytes(ticks);
string id = Convert.ToBase64String(bytes)
                        .Replace('+', '_')
                        .Replace('/', '-')
                        .TrimEnd('=');
Console.WriteLine (id);

収量:

Gq1rNzbezwg
于 2013-02-21T18:26:10.340 に答える
13

日時から次の数字を取得すると、それを機能させることができるはずです...次のようなものです。

DateTime.Now.ToString("yyMMddHHmmssff");

これは16文字で、必要に応じて他のプレフィックス用に4を残します。

したがって、2013年2月21日、10:21頃は「130321102142」になり、次は「130321102169」などになります。

日時の書式設定の詳細については、http://msdn.microsoft.com/en-us/library/zdtaw1bw.aspxを参照してください。

于 2013-02-21T18:22:12.413 に答える
12

各呼び出しの間に少なくとも1秒を指定したので、これは機能するはずです:

DateTime.Now.ToString("yyyyMMddHHmmss");

その正確に14文字。

于 2013-02-21T18:21:00.183 に答える
0

追加するだけです...ダニの数字のみを使用する場合はsubstring、たとえば次のように使用できます。

int onlyThisAmount = 20;
string ticks = DateTime.Now.Ticks.ToString();
ticks = ticks.Substring(ticks.Length - onlyThisAmount);
于 2016-08-26T11:53:34.823 に答える
0
    /// <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でなくても、独自の実装を作成できます。

于 2016-11-17T14:46:49.810 に答える