2012-10-22 42 views
-6

是否有无论如何我可以使用c#生成唯一的序列号我们正在开发一个网站,我们在注册时为每个用户分配一个个人ID ...我需要生成一个14位数字串。为每个用户生成个人ID

For eg. 

AA 01 201 210 22 

AA 02 201 210 22 

. 

. 

AA 99 201 210 22 

then it should start from 

AB 01 201 210 22 

AB 02 201 210 22 and so on... 

Last 8 digits are current date... 

Thanks.... 



private string ConvertDecString(int value) 
     { 
      string CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
      string retVal = string.Empty; 
      int remainder = 0; 
      do 
      { 
       remainder = value % 26; 
       retVal = CHARS.Substring(remainder, 1) + retVal; 
       value = (value/26) - 1; 
      } 
      while ((value + 1) > 0); 
      return retVal; 
     } 


public string GetCurrentDate() 
    { 
     string todaydate = System.DateTime.Now.Year.ToString() + System.DateTime.Now.Month.ToString() + System.DateTime.Now.Day.ToString(); 
     return todaydate; 
    } 

    private Random _random = new Random(); 

    public int RadomNum() 
    { 
     return _random.Next(10, 99); 
    } 

private string GetActualDate() 
    { 
     string Year = System.DateTime.Now.Year.ToString(); 
     string ActualDate1 = Year + GetProperMonth() + GetProperDay(); 
     int n = Convert.ToInt32(ActualDate1); 
     string ActualDate = String.Format("{0:000 000 00}", n); 
     return ActualDate; 
    } 

    private string GetProperMonth() 
    { 
     string Month = System.DateTime.Now.Month.ToString(); 
     string MonthNo = ""; 

     if (Month == "1") 
     { 
      MonthNo = "01"; 
     } 
     else if (Month == "2") 
     { 
      MonthNo = "02"; 
     } 
     else if (Month == "3") 
     { 
      MonthNo = "03"; 
     } 
     else if (Month == "4") 
     { 
      MonthNo = "04"; 
     } 
     else if (Month == "5") 
     { 
      MonthNo = "05"; 
     } 
     else if (Month == "6") 
     { 
      MonthNo = "06"; 
     } 
     else if (Month == "7") 
     { 
      MonthNo = "07"; 
     } 
     else if (Month == "8") 
     { 
      MonthNo = "08"; 
     } 
     else if (Month == "9") 
     { 
      MonthNo = "09"; 
     } 
     else 
     { 
      MonthNo = Month; 
     } 
     return MonthNo; 
    } 


    private string GetProperDay() 
    { 
     string Day = System.DateTime.Now.Day.ToString(); 
     string DayNo = ""; 

     if (Day == "1") 
     { 
      DayNo = "01"; 
     } 
     else if (Day == "2") 
     { 
      DayNo = "02"; 
     } 
     else if (Day == "3") 
     { 
      DayNo = "03"; 
     } 
     else if (Day == "4") 
     { 
      DayNo = "04"; 
     } 
     else if (Day == "5") 
     { 
      DayNo = "05"; 
     } 
     else if (Day == "6") 
     { 
      DayNo = "06"; 
     } 
     else if (Day == "7") 
     { 
      DayNo = "07"; 
     } 
     else if (Day == "8") 
     { 
      DayNo = "08"; 
     } 
     else if (Day == "9") 
     { 
      DayNo = "09"; 
     } 
     else 
     { 
      DayNo = Day; 
     } 
     return DayNo; 
    } 

    public string GeneratePatientNumber(string Alpha) 
     { 
      return ConvertDecString(Convert.ToInt16(Alpha)) + " " + RadomNum() + " " + GetActualDate(); 
     } 

GeneratePatientNumber(string Alpha) - this method generates 12 digit personal id... 
+0

那么,什么是你的问题?你想让社区提供代码吗? –

+1

这似乎不是一个复杂的问题:它是一个格式化的字符串,包含一个日期和一个递增的计数器。你有什么尝试? –

+0

到目前为止,您是否尝试过任何方法? – Curt

回答

0
public string GetPersonalId (int n) 
{ 
    char letter1 = (char)('A' + ((n/10/26/26) % 26)); 
    char letter2 = (char)('A' + ((n/10/26) % 26)); 
    char digit1 = (char)('0' + ((n/10) % 10)); 
    char digit2 = (char)('0' + ((n) % 10)); 

    string dateString = string.Format("{0:yyyyMMdd}", DateTime.Today) 
     .Insert(6, " ") 
     .Insert(3, " "); 

    return string.Format("{0}{1} {2}{3} {4}", 
     letter1, letter2, digit1, digit2, dateString); 
} 

public GetNextSequenceForToday() 
{ 
    SqlCommand query = new SqlCommand() 
    query.CommandText = 
     "SELECT COUNT(*) FROM [Users] " + 
     "WHERE [Date] >= @today AND [Date] < @tomorrow"; 
    query.Parameters.Add("@today", DateTime.Today); 
    query.Parameters.Add("@tomorrow", DateTime.Today.AddDays(1)); 

    int count = Convert.ToInt32(query.ExecuteScalar()); 

    return count + 1; 
} 
+0

它给出了错误,说不能在这一行隐式地将int类型转换为char:char letter1 ='A'+((n/10/26/26)%26); – punit

+0

好的。我添加了类型转换。 –

+0

非常感谢大家的配合.... 但我们的要求是在AA 99之后,它应该从AB 01开始依此类推...... 并且每天都从AA 01开始为当天的第一个注册用户。如何管理所有这些东西... 谢谢.. – punit

0
 
public class IDGenerator 
    { 
     private int _firstLetter = 0; 
     private int _secondLetter = 0; 
     private int _firstDigitCounter = 90; 
     private string _chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

     public string NewID() 
     { 
      return twoLetters(); 
     } 

     private string twoLetters() 
     { 
      _firstDigitCounter += 1; 
      if (_firstDigitCounter == 99) 
      { 
       _firstDigitCounter = 0; 
       _secondLetter += 1; 
      } 

      if (_secondLetter > _chars.Length) 
      { 
       _secondLetter = 0; 
       _firstLetter += 1; 
      } 

      return _chars.Substring(_firstLetter, 1) + _chars.Substring(_secondLetter, 1) + " " + _firstDigitCounter.ToString("00") + " " + DateTime.Now.Year.ToString().Insert(3, " ") + DateTime.Now.Date.ToString("MM dd"); 
     } 
    } 

+0

只是重置_firstDigitCounter,我只是做了测试 – Jaiden

+0

我想生成一个字符串取决于一些注册ID ...即m将int作为参数传递给函数.... – punit