2016-07-11 21 views
-1

Ich habe ein System, wo Benutzer userid: s in ihr Telefon schreiben müssen. Ich mag die ID verschleiern: s so, dass es ziemlich schwierig ist, die Zahl zu erraten, und dann will ich es in eine Basis-23-Nummer konvertieren die folgenden Zeichen verwenden:Zahl in Zeichen umwandeln?

abcdefghjkmnpqrstuvwxyz 

Ich bin Droppin I, L und O, weil diese Charaktere ernsthaft ID-Nummern aussaugen.

So forexample, wenn der Eingang 23 ist, wäre der Ausgang aa sein würde 24 sein ab usw. (Ich werde die userIds Gerangel/entwirren, bevor ich sie durch diese Funktion ausführen)

Ich versuche zu Figur heraus, wie man die ganze Zahl in einen Buchstaben umwandelt. dies ist das Beste, was ich oben mit com können:

var scrambled = 234, 
    charmap = ['a','b','c'...] 

scrambled.toString(23) 

Hier Ich mag würde charmap [verschlüsselt] für jeden einzelnen Charakter und speichern Sie es in eine Zeichenfolge tun, ich könnte das in einen String verschlüsselt konvertieren und teilen Sie es, aber ich denke, es gibt eine sauberere Art, es zu tun. Moderne Web-Technologie ist in Ordnung!

+1

können Sie einige Beispiele für Ein- und Ausgänge teilen? – gurvinder372

+0

Genau, weil wir Ihr Ziel nicht erreichen –

+0

mit zwei Beispielen aktualisiert, lassen Sie mich wissen, wenn es immer noch nicht klar ist! – Himmators

Antwort

2

Da Ihre Charmap nicht trivial ist, könnten Sie stattdessen Ihre eigene Funktion schreiben. Mit dem charmap in einem Verschluss versteckt. Hier

ist eine Geige, Schwärzler Hotels bieten zwei Seitenkonvertierungsobjekt:

var convert = (function() { 
 
    var base = 23; 
 
    var charmap = "abcdefghjkmnpqrstuvwxyz"; 
 
    return { 
 
    toString: function(i) { 
 
     var result = ""; 
 
     do { 
 
     result = charmap.charAt(i % base) + result; 
 
     i = (i - i % base)/base; 
 
     } while (i > 0); 
 

 
     return result; 
 
    }, 
 
    fromString: function(s) { 
 
     var result = 0; 
     for (var i = 0; i < s.length; ++i) { 
 
     var k = charmap.indexOf(s.charAt(i)); 
 
     result = result * base + k; 
     } 
 

 
     return result; 
 
    } 
 
    }; 
 
}()); 
 

 

 
for (var i = 0; i < 100; ++i) { 
 
    if (convert.fromString(convert.toString(i)) !== i) { 
 
    console.log("error at " + i); 
 
    } 
 
} 
 

 
console.log("ok");

+0

Das ist schlau, du bist schlau! – Himmators

+0

Allerdings muss ich auch das Umgekehrte tun, IE wandle eine Zeichenkette in eine ganze Zahl um, nehme an, dass ich das auch umkehren könnte – Himmators

+0

dies verursacht auch eine infinit Schleife, weil ich bei 0 endet. – Himmators

0

diese Methode versuchen, ich in C#, seine genau, was zu tun, und ich bin sicher, dass Sie es zu Javascript umwandeln kann:

empfehle ich Ihnen
private static string strBasechars = "BCDEFGHIJKLMNOPQRSTUVWXYZ"; 

    public static string ToBase(long input) 
     { 
      string r = string.Empty; 
      int targetBase = strBasechars.Length; 
      do 
      { 
       r = string.Format("{0}{1}", 
        strBasechars[(int)(input % targetBase)], 
        r); 
       input /= targetBase; 
      } while (input > 0); 

      return r; 
     } 

Obwohl hoch die alle Vokale zu entfernen, wie Sie vielleicht am Ende mit einigen schlechten Wörtern :)

+0

Cool Ich schreibe nicht C, ein oder zwei Kommentare in den Code würde es viel einfacher für mich zu lesen machen :) – Himmators

+0

@Himmators ... überprüfen Sie die 2. Antwort von Regis Portalez geschrieben ... es ist genau das, was Sie brauchen . 23 ist targetBase in meiner Probe ... alles andere ist gleich –

0

Sie eine Do While-Schleife für die Codierung verwenden könnte und den Rest des Wertes erhalten und die Länge der Zeichensatz zum Verschlüsseln und Dekodieren verwenden eine Hash-Tabelle und berechnen den Wert auf den Indizes.

function encode(value, charmap) { 
 
    var encoded = '', 
 
     l = charmap.length; 
 

 
    do { 
 
     encoded = charmap[value % l] + encoded; 
 
     value = Math.floor(value/l); 
 
    } while (value) 
 
    return encoded; 
 
} 
 

 
function decode(value, charmap) { 
 
    var hash = Object.create(null), 
 
     l = charmap.length; 
 

 
    charmap.split('').forEach(function (a, i) { 
 
     hash[a] = i; 
 
    }); 
 
    return value.split('').reduce(function (r, a) { 
 
     return r * l + hash[a]; 
 
    }, 0); 
 
} 
 

 
var charmap = 'abcdefghjkmnpqrstuvwxyz', 
 
    encodeValue = 23, 
 
    encodedValue = encode(encodeValue, charmap), 
 
    decodedValue = decode(encodedValue, charmap); 
 

 
console.log(encodedValue); 
 
console.log(decodedValue);

Verwandte Themen