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.
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’.)
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.
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
}
}