mercoledì 31 luglio 2013

C# - Convertire un numero in una base qualsiasi

Recentemente ho dovuto sviluppare un'integrazione con il servizio di spedizioni SDA. Per la generazione di alcuni Tracking Number ho dovuto creare dei progressivi, utilizzando una sequenza di numeri e lettere, secondo le specifiche di SDA.

Questo mi ha portato a voler creare una funzione di supporto per poter convertire un numero in una base qualsiasi, determinata da ad un array di caratteri.


        /// <summary>
        /// Converts a value to a custom base.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <param name="baseChars">The base chars.</param>
        /// <returns></returns>
        private static string ConvertToBase(int value, char[] baseChars)
        {
            string result = string.Empty;
            int targetBase = baseChars.Length;

            do
            {
                result = baseChars[value % targetBase] + result;
                value = value / targetBase;
            }
            while (value > 0);

            return result;
        }


Per convertire ad esempio un numero es 8258, in base 2 basta scrivere


int value = 8258;
string baseTwoResult = ConvertToBase(value, new char[] { '0', '1' });


Il risultato sarà "10000001000010"



Per convertire un numero secondo la base di SDA ho dovuto fare così:

int value = 8258;
var chars = new char[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
string baseSDAResult = ConvertToBase(value, chars);

Il risultato è : "GNO"


Spero possa essere utile anche a qualcun altro.

Nessun commento:

Posta un commento