2010-03-16 7 views

Répondre

5
public static IEnumerable<string> Numbers() 
{ 
    return Enumerable.Range(0xA0000, 0xFFFF9 - 0xA0000 + 1) 
     .Select(x => x.ToString("X")); 
} 

Vous pourriez aussi avoir une classe de générateur id:

public class IdGenerator 
{ 
    private const int Min = 0xA0000; 
    private const int Max = 0xFFFF9; 
    private int _value = Min - 1; 

    public string NextId() 
    { 
     if (_value < Max) 
     { 
      _value++; 
     } 
     else 
     { 
      _value = Min; 
     } 
     return _value.ToString("X"); 
    } 
} 
+0

premier merci pour la réponse rapide, comme je l'ai besoin de stocker les informations dans DB ... chaque fois que j'obtiendrai le dernier ID de la base de données en fonction de cet identifiant, j'ai besoin de générer un nouvel ID Uniqu. – user294527

+0

Je ne comprends pas ce que vous demandez. Dans votre question initiale, vous avez clairement décrit l'algorithme nécessaire pour générer des numéros d'identification uniques. Reformulez votre question et expliquez quel est l'algorithme utilisé pour générer un ID donné avec un autre ID. –

+0

Cela ne fonctionne pas. Le modèle produit n'est même pas proche du modèle réel corroboré par la question – Darkonekt

0

exécuter cette requête afin d'obtenir le dernier ID dans la base de données

SELECT TOP 1 [ID_COLUMN] FROM [NAME_OF_TABLE] ORDER BY [ID_COLUMN] DESC 

Lire le résultat à une variable et puis exécutez la fonction suivante sur le résultat afin d'obtenir l'ID suivant.

public string NextID(string lastID) 
{ 
    var allLetters = new string[] {"A", "B", "C", "D", "E", "F"}; 
    var lastLetter = lastID.Substring(0, 1); 
    var lastNumber = int.Parse(lastID.Substring(1)); 

    if (Array.IndexOf(allLetters, lastLetter) < allLetters.Length - 1 && 
     lastNumber == 9999) 
    { 
     //increase the letter 
     lastLetter = allLetters(Array.IndexOf(allLetters, lastLetter) + 1); 
     lastNumber = 0; 
    } else { 
     lastLetter = "!"; 
    } 

    var result = lastLetter + (lastNumber + 1).ToString("0000"); 

    //ensure we haven't exceeded the upper limit 
    if (result.SubString(0, 1) == "!") { 
     result = "Upper Bounds Exceeded!"; 
    } 

    return result; 
} 

AVERTISSEMENT
Ce code ne génère le premier ensemble d'ID. Je ne comprends pas le processus de génération du second ensemble.

0

Si vous avez besoin de le prendre dans la base de données et de le faire, vous pouvez utiliser quelque chose comme ce qui suit. Cela devrait vous donner le format que vous recherchez en tant que conversion directe à partir de l'ID de la base de données.

1

voir ce code

private void button1_Click(object sender, EventArgs e) 
{ 
    string get = label1.Text.Substring(7); //label1.text=ATHCUS-100 
    MessageBox.Show(get); 
    string ou="ATHCUS-"+(Convert.ToInt32(get)+1).ToString(); 
    label1.Text = ou.ToString(); 

} 
1

Je suis quelques années en retard. Mais j'espère que ma réponse aidera tout le monde à la recherche d'un bon générateur d'identité. NON des réponses précédentes fonctionnent comme prévu et ne répondent pas à cette question.

Ma réponse répond parfaitement aux exigences. Et plus!!!

Notez que la définition de _fixedLength à ZERO créera des ID de taille dynamique. En le définissant à n'importe quoi d'autre créera FIXED LENGTH ID; Notez également que l'appel de la surcharge qui prend un ID actuel "germe" la classe et les appels consécutifs n'ont pas besoin d'être appelés avec un autre ID. Sauf si vous avez des identifiants aléatoires et que vous avez besoin du suivant sur chacun d'eux.

Profitez-en!

public static class IDGenerator 
{ 
    private static readonly char _minChar = 'A'; 
    private static readonly char _maxChar = 'C'; 
    private static readonly int _minDigit = 1; 
    private static readonly int _maxDigit = 5;  
    private static int _fixedLength = 5;//zero means variable length 
    private static int _currentDigit = 1; 
    private static string _currentBase = "A"; 

    public static string NextID() 
    {     
    if(_currentBase[_currentBase.Length - 1] <= _maxChar) 
    { 
     if(_currentDigit <= _maxDigit) 
     { 
     var result = string.Empty; 
     if(_fixedLength > 0) 
     {    
      var prefixZeroCount = _fixedLength - _currentBase.Length; 
      if(prefixZeroCount < _currentDigit.ToString().Length) 
      throw new InvalidOperationException("The maximum length possible has been exeeded."); 
      result = result = _currentBase + _currentDigit.ToString("D" + prefixZeroCount.ToString()); 
     } 
     else 
     { 
      result = _currentBase + _currentDigit.ToString(); 
     }    
     _currentDigit++; 
     return result; 
     } 
     else 
     { 
     _currentDigit = _minDigit; 
     if(_currentBase[_currentBase.Length - 1] == _maxChar) 
     { 
      _currentBase = _currentBase.Remove(_currentBase.Length - 1) + _minChar; 
      _currentBase += _minChar.ToString(); 
     } 
     else 
     { 
      var newChar = _currentBase[_currentBase.Length - 1]; 
      newChar++; 
      _currentBase = _currentBase.Remove(_currentBase.Length - 1) + newChar.ToString(); 
     } 

     return NextID(); 
     } 
    } 
    else 
    {   
     _currentDigit = _minDigit; 
     _currentBase += _minChar.ToString(); 
     return NextID();    

    }  
    } 

    public static string NextID(string currentId) 
    { 
    if(string.IsNullOrWhiteSpace(currentId)) 
     return NextID(); 

    var charCount = currentId.Length; 
    var indexFound = -1; 
    for(int i = 0; i < charCount; i++) 
    { 
     if(!char.IsNumber(currentId[i])) 
     continue; 

     indexFound = i; 
     break; 
    } 
    if(indexFound > -1) 
    { 
     _currentBase = currentId.Substring(0, indexFound); 
     _currentDigit = int.Parse(currentId.Substring(indexFound)) + 1; 
    } 
    return NextID(); 
    } 
} 

Ceci est un exemple de la ouput utilisant _fixedLength = 4 et _maxDigit = 5

A001 A002 A003 A004 A005 B001 B002 B003 B004 B005 C001 C002 C003 C004 C005 AA01 AA02 AA03 AA04 AA05 AB01 AB02 AB03 AB04 AB05 AC01 AC02 AC03 AC04 AC05

Questions connexes