//----------------------------------------------------------------------------//
//BASE 62
//El algoritmo de Base 62, se trata sencillamente de pasar un número en base 10 a base 62, mantenimiento una relación de equivalencia
//entre número y carácter, por ejemplo A=10, B=11, ..z=61
//Base 62 equivale a hacer la conversión de número a palabras. Para lograrlo se basa en el método de divisiones sucesivas hasta llegar
//a un cociente 0, los restos en orden inverso, expresados como caracteres, nos dan la palabra resultante.
//----------------------------------------------------------------------------//
STATIC a62:= {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',;
'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', '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' }
//-------------------//
function Base10To62(nNumero, nLength, cFillChar)
Local nCociente := 1, nResto
Local cNumero := ""
Do While (nCociente >= 1)
nCociente := nNumero / 62
nResto := nNumero % 62
cNumero := a62[nResto+1] + cNumero
nNumero := nCociente
End Do
RETURN if(valtype(nLength)='N',PADL(cNumero,nLength,cFillChar),cNumero)
//-------------------//
function Base62To10(cNumero)
local i,nNumero:=0
cNumero := LTRIM(cNumero)
for i:=1 to len(cNumero)
nNumero += (Ascan(a62,substr(cNumero,len(cNumero)+1-i,1))-1) * (62^(i-1))
next
RETURN nNumero