Diese ID's werden intern als von 1 beginnender Zähler verwaltet. Angezeigt werden die ID's jedoch nicht als Nummer, sondern als Buchstaben und Ziffernkombination:
Dieses Darstellung hat 2 Vorteile gegenüber einer rein numerischen Darstellung:
Ein paar Beispiele:
| Nummer | ID |
| 0 | A00 |
| 1 | A01 |
| 99 | A99 |
| 100 | B00 |
| 5199 | z99 |
| 5200 | BA00 |
| 154972 | dp72 |
| 270400 | BAA00 |
| DEBUG-INFO: Text unvollständig/fehlerhaft |
string CreateAlphaNumericID ( uint32 id )
{
// Auseichend großen temporären Buffer bereitstellen
const int bufsize = 30;
char buf[bufsize];
char *dest = buf+bufsize;
// Null-Terminator
*--dest = 0;
// 2. Ziffer
*--dest = '0' + id % 10;
id /= 10;
// 1. Ziffer
*--dest = '0' + id % 10;
id /= 10;
// Tabelle mit Buchstaben
static char tab[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
// Alle nötigen Buchstaben, jedoch mindestens einer
do
{
*--dest = tab[ id % 52 ];
id /= 52;
} while(id);
// Ergebnis einem C++ String zuweisen und zurückgeben.
string str;
str = dest;
return str;
}
char * ScanAlphaNumericID ( uint32 &result_id, ccp source )
{
SkipSpaces(source);
uint32 id = 0;
for(;;)
{
char ch = *source++;
if ( ch >= '0' && ch <= '9' )
{
id = 10 * id + ch - '0';
}
else if ( ch >= 'A' && ch <= 'Z' )
{
id = 52 * id + ch - 'A';
}
else if ( ch >= 'a' && ch <= 'z' )
{
id = 52 * id + ch - 'a' + 26;
}
else break;
}
result_id = id;
return (char*)source - 1;
}