Eine IP in Farben umwandeln (IPv4)

Was genau eine IP ist kann man ja bei Wikipedia und Co nachlesen. Ich gehe hier darauf ein, was man mit IPs sonst so machen kann.
Eine IPv4-IP besteht aus 4 Segmenten, die alle zwischen 0 und 255 sind, dies hat den Hintergrund dass für eine IP maximal 4 Bytes zur Verfügung gestellt werden.
4 Bytes entsprechen dabei 32bit (IPv6 umfasst 128bit, was 4 mal 32bit sind).

Eine IP auseinandergenommen besteht also aus 4 Decimalzahlen zwischen 0 bis 255.

Test-IP 217.245.252.97

Diese besteht aus
217
245
252
97

Das ganze hexadezimal, mit der Function dechex in PHP.
d9
f5
fc
61

Und dann als binären Code.
(Naja man kennt das aus dem TV 001011100010110111102 [Roboteral(b|p)traum] )
11011001 (entspricht 8bit)
11110101 (entspricht 8bit)
11111100 (entspricht 8bit)
01100001 (entspricht 8bit)

Achso, die Function in PHP wäre decbin. Und nun sehen wir auch die 32 bit.

Daraus folgt

Eine IP kann also als
217.245.252.97
sowie als
d9.f5.fc.61
und als
11011001.11110101.11111100.1100001
gelesen werden.

In Farbe (und bunt)

In CSS gibt es ähnliche Codes die für Farbe verwendet werden.
RGB verwendet dabei 3 Farben und RGBA 3 + den Alphakanal.
HEX-Farbcodes (Die Drogen-Farbcodes, die immer Hash dabei haben), bestehen ebenfalls aus drei Farbangaben.
Und daraus lassen sich wunderbare Sachen machen, auch mit der IP.

Die folgende Function holt uns erstmal die IP,prüft diese auf IPv4 und splittet diese als Array.
Achtung, filter_var gibt es erst ab PHP 5.2, für darunter muss man anders prüfen

$myip = $_SERVER['REMOTE_ADDR'];
if(filter_var($myip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
  $ip = explode(".",$myip);
} else {
  $ip = false;
}

Mit dem Array kann man schon arbeiten und Farben erzeugen:

if($ip) {
    echo 'rgb('.$ip[0].','.$ip[1].','.$ip[2].')';
// rgb-code mit den ersten 3 IP Fragmenten;
    echo 'rgb('.$ip[1].','.$ip[2].','.$ip[3].')';
// rgb-code mit den letzten 3 IP Fragmenten;
}

Das Ergebnis

rgb(217,245,252)

rgb(245,252,97)

Das ganze geht auch als Hex-Farbcode:

if($ip) {
    echo '#'.dechex($ip[0]).dechex($ip[1]).dechex($ip[2]);
// hex-code mit den ersten 3 IP Fragmenten;
    echo '#'.dechex($ip[1]).dechex($ip[2]).dechex($ip[3]);
// hex-code mit den letzten 3 IP Fragmenten;
}

Das Ergebnis

#d9f5fc

#f5fc61

Klar, es ist die gleiche Farbe, aber wie wäre es mit etwas Transparenz

if($ip) {
    echo 'rgba('.$ip[0].','.$ip[1].','.$ip[2].','.round(($ip[3] / (255/100)) / 100,2).')';
// rgba-code mit den ersten 3 IP Fragmenten, das letzte für die Alphaberechnung;
    echo 'rgba('.$ip[1].','.$ip[2].','.$ip[3].','.round(($ip[0] / (255/100)) / 100,2).')';
// rgba-code mit den letzten 3 IP Fragmenten, das erste für die Alphaberechnung;
}

Das Ergebnis

rgba(217,245,252,0.38)

rgba(245,252,97,0.85)

Als kleinen Spass wurden eine ganze Weile IPs der Besucher geshuffelt und als Farben geschpeichert um zu schaue was für ein Bild rauskommt.
Das Ergebnis sieht man hier.

Schreib einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

You may use these HTML tags and attributes

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

But, it will became readable code