Von der Zahl zum Wort

Viele Menschen können sich Zahlen schlechter als Worte merken und müssen es doch tun – ob bei einer Telefonnummer, einem Zahlenschloss, einer Kontonummer oder der Kennung einer Bankkarte. Dabei wäre es in zahlreichen Fällen genauso möglich, eine Zahl als einfaches Fantasiewort anstatt als Ziffernfolge auszudrücken.

Im folgenden Abschnitt findet sich eine Funktion, in diesem Fall in der Programmiersprache PHP umgesetzt, die natürliche Zahlen in Worte umwandelt. Die Funktion gibt beispielsweise für die Otterndorfer Postleitzahl 21762 das Wort deraf und für 15523866 das Wort migobär aus. Erläuterungen finden sich unter dem Quelltext.

PHP-Quelltext

<?php // Zeichensatz: UTF-8

// zahlwort wandelt eine $zahl in ein Fantasiewort um
function zahlwort ($zahl) {

    
$selbstlaute = array ('a','ä','e','i','o','ö','u','ü');
    
$mitlaute    = array ('b','d','f','g','h','k','l','m',
                          
'n','p','r','s','t','w','x','z');
    
$wort = array ();
    
$w false;
    do {
        if (
$w = !$w):
            
$wort[] = $mitlaute[$zahl 15];
            
$zahl >>= 4;
        else:
            
$wort[] = $selbstlaute[$zahl 7];
            
$zahl >>= 3;
        endif;
    } while (
$zahl 0);
    return 
implode (array_reverse ($wort));

// function zahlwort

// den aktuellen UNIX-Zeitstempel als Wort ausgeben
header ('Content-type: text/plain; charset=UTF-8');
header ('X-Robots-Tag: noindex');
print 
zahlwort (time ());

// Ende

Erläuterung der Funktion

In der Funktion zahlwort habe ich zunächst einen Vorrat von acht Selbstlauten und sechzehn Mitlauten angelegt. $8=2^3$ und $16=2^4$ sind Zweierpotenzen, was die Verarbeitung am binär arbeitenden Rechner erleichtert. Man könnte das Programm aber mithilfe des Teilens mit Rest auch so stricken, dass ein anderer Buchstabenvorrat genutzt wird. Ein Vorschlag für jene, die nicht mit Umlauten ä, ü, ö arbeiten möchten: Zwielaute wie au, ei, eu kann man natürlich auch verwenden.

Danach wird eine do-while-Schleife durchlaufen, in der eine Fallunterscheidung vorgenommen wird. Das Kriterium ($w = !$w) der Fallunterscheidung sorgt dafür, das die beiden Fälle if und else abwechselnd eintreten. Das einzelne Gleichheitszeichen darf man dabei nicht als Vergleichsoperator missverstehen; es handelt sich dabei um einen Zuweisungsoperator. Bei jedem Schleifendurchlauf wird der Variablen w mit dem Ausrufezeichen als Operator der logischen Negation das Gegenteil seines alten Wahrheitswertes zugewiesen.

So wird bei jedem Schleifendurchlauf abwechselnd entweder ein Buchstabe aus dem Vorrat der Mit- oder aus jenem der Selbstlaute gewählt, um leicht aussprechbare Silben zu erzeugen. Die Verknüpfung $zahl & 15 mit dem auf Bitebene arbeitenden Und-Operator liest dabei die vier niedrigstwertigen Bits der Zahl aus (binär wird fünfzehn als 1111 dargestellt). Je nachdem welchen Wert diese vier Bits haben, wird einer der sechzehn Mitlaute gewählt. Bei den Selbstlauten funktioniert das entsprechend mit den drei niedrigstwertigen Bits, denen einer aus acht Selbstlauten zugeordnet wird.

Die Anweisungen $zahl >>= 4 beziehungsweise $zahl >>= 3 verschieben dann die Bits der Zahl um vier beziehungsweise drei Stellen, wobei die niedrigstwertigen, bereits berücksichtigten Bits verschwinden. Die Schleife wird verlassen, wenn die ursprüngliche Zahl auf null reduziert und ihr Informationsgehalt komplett ins Wort übertragen wurde.

Beispiel

Das obige Programm kann hier ausprobiert werden: zeitstempel.php
Es gibt exemplarisch den aktuellen UNIX-Zeitstempel – das ist die Anzahl der seit dem 1. Januar 1970, 0:00 Uhr koordinierter Weltzeit, vergangenen Sekunden – in ein Wort umgewandelt aus.