2010-03-16 18 views

Respuesta

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

También podría tener una clase de generador de Identificación:

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

primer lugar gracias por la rápida respuesta, como que necesito para almacenar la información en la base de datos ... cada vez que obtengo la última ID de DB basada en esa última ID, necesito generar una nueva ID de Uniqu. – user294527

+0

No entiendo lo que estás preguntando. En su pregunta original, describió claramente el algoritmo necesario para generar números de identificación únicos. Repita su pregunta y explique cuál es el algoritmo utilizado para generar una identificación con alguna otra ID. –

+0

Esto no funciona. El patrón producido ni siquiera está cerca del patrón real sugerido por la pregunta – Darkonekt

0

ejecutar esta consulta con el fin de conseguir la última identificación en la base de datos

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

Leer el resultado a una variable y luego ejecute la siguiente función en el resultado para obtener la siguiente ID.

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; 
} 

RENUNCIA
Este código sólo generará el primer conjunto de documentos de identidad. No entiendo el proceso de generar el segundo conjunto.

0

Si necesita tomarlo de la base de datos y hacer esto, puede utilizar algo como lo siguiente.

int dbid = /* get id from db */ 
string id = dbid.ToString("X5"); 

Esto debería darle el formato que está buscando como una conversión directa de la ID de la base de datos.

1

ver el código

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

soy unos años de retraso. Pero espero que mi respuesta ayude a todos a buscar un buen ID Generator. NON de las respuestas anteriores funcionan como se esperaba y no responden a esta pregunta.

Mi respuesta se ajusta perfectamente a los requisitos. ¡¡¡Y más!!!

Observe que establecer _fixedLength en ZERO creará ID de tamaño dinámico. Al establecerlo en cualquier otra parte, se crearán ID de LONGITUD FIJA;

Tenga en cuenta también que llamar a la sobrecarga que toma una identificación actual "sembrará" la clase y las llamadas consecutivas NO necesitan ser llamadas con otra ID. A menos que tengas identificaciones aleatorias y necesites la siguiente en cada una.

¡Disfrútalo!

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(); 
    } 
} 

Este es un ejemplo de que la salida usando _fixedLength = 4 y _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

Cuestiones relacionadas