[ajuda] incrementar seqüência alfanumérica

4 respostas
lcn.andre

Boa tarde!
Preciso fazer um gerador de seriais para produtos aqui no trabalho e as coisas andam meio corridas, por isso vim pedir a ajuda de vocês, pois essa rotina danada está demorando demais pra sair.

O que preciso é de uma rotina que incremente uma seqüência alfanumérica, por exemplo:
A001, A002… A999, B001, etc.

Alguém conhece um jeito de fazer isso?
Grato.

4 Respostas

E

Você já deu sua resposta. Quando chegar em 999, passe para 1, e passe para a próxima letra (se era A, por exemplo, passe para ‘A’ + 1 que é ‘B’.)

lcn.andre

Foi só um exemplo, mas na prática não é tão simples assim. Vou precisar incrementar coisas do tipo:

  • A003B6FC6F
  • BCAB00102
  • 093BB76CF

etc… se fosse tão simples assim eu já teria resolvido sozinho, haha.

pmlm

Hexadecimal?

E

Quer fazer em hexadecimal ou em Base-36? Em Base-36, você tem os dígitos de 0 a 9, e as letras de A a Z.

class IncrementarAlfanumericos {
    public static void main (String[] args) {
        // Supondo em hexadecimal, e que tenha exatamente 8 bytes (16 caracteres)
        String s = "A003B6FC6F";
        System.out.println (s); // 
        long n = Long.parseLong (s, 16); 
        n = n + 1;
        s = Long.toString (n, 16).toUpperCase();
        System.out.println (s); // note que não põe zeros à esquerda (imprime A003B6FC70). Se precisar deles:
        s = String.format ("%016X", n); 
        System.out.println (s); // (imprime 000000A003B6FC70)
        // Agora supondo em base-36, com 12 posições. 
        s = "A003B6FC6F";
        System.out.println (s);
        n = Long.parseLong (s, 36); 
        n = n + 1;
        s = Long.toString (n, 36).toUpperCase(); 
        System.out.println (s); // Imprime A003B6FC6G. Note que não põe zeros à esquerda. 
        // Como format não lida com bases arbitrárias, apenas 8, 10 e 16, então 
        // você mesmo é que tem de completar com zeros à esquerda. Algo como:
        s = ("000000000000" + s);
        s = s.substring (s.length() - 12);
        System.out.println (s); // Imprime 00A003B6FC6G
    }
}
Criado 13 de outubro de 2010
Ultima resposta 13 de out. de 2010
Respostas 4
Participantes 3