<html>
<head>
<title>
Magic Numbers in PHP
</title>
</head>
<body bgcolor="A0B0D0">
<script language="php">
if (isset ($dattim)) {
   if (
$dattim " ") {
       
$number strtotime ($dattim);
       
$zerotm strtotime ("01/01/1970 00:00:00");
       
$number -= $zerotm;
   }
}
include (
"mysinc.php");
</script>   
<form action="magnum.php" method="POST">
Notes:<ul>
<li>As PHP cannot handle unsigned numbers (at least I couldn't figure out
how), this is a "31" bit version of <b>MagNum</b>.
<li>For "Binary not" this means that I have to strip bit 32 from the result.
Just imagine for most numbers that the first 7 is a F...
<li>Yes, the source of this script is right here. You don't even have to
give me credit if you use it, or parts of it, elsewhere. Not that we're
talking such a big deal here...
</ul>
<table border="0" bgcolor="90A0B0">
<tr><td>Enter your number (decimal, 0xhexadecimal or 0octal)</td><td>
<script language="php">
echo "<input type=\"text\" name=\"number\" size=\"20\" maxlength=\"14\"";
if (isset (
$number)) {
    
$str strval ($number);
    if (
substr ($str01) == "0") {
        if (
strtolower (substr ($str11)) == 'x') {
            
$num intval (substr ($str2), 16);
        } else {
            
$num intval (substr ($str1), 8);
        }
    } else {
        
$num intval ($number);
    }
    echo 
" value=\"";
    echo 
$num;
    echo 
"\">";
} else {
    echo 
">";
}
</script>
</td></tr>
<tr><td>Show matching user-submitted "special" numbers</td><td>
<script language="php">
echo "<input type=\"checkbox\" name=\"showUser\"";
if (isset (
$showUser)) echo " checked";
echo 
"></td></tr>";
</script> 
<tr><td>Test for prime factors (somewhat CPU costly)</td><td>
<input type="checkbox" name="showFact"></td></tr> 
</table><p>
Thanks to a semi-handy PHP function you can also enter a date &amp; time
in some North-American format.<br>
<i>Remember, they put the month first, like in 01/22/1970 13:14:15.</i><br>
If you enter ONLY a time the date will today in the server's timezone.<br>
The date you enter is interpreted as Universal (GMT) time, however...<br>
Confused? Don't worry, it only gets worse from here on!<br>
<table border="0" bgcolor="90A0B0"><tr><td>
Date &amp; time (or leave empty)</td><td>
<input type="text" name="dattim" size="40" maxlength="60"> 
</td></tr></table>
Now hit <b>[Enter]</b> or press the button:
<input type="submit" name="submit" value="Analyze"><p>
<script language="php">

function divBy ($a$b)
{
    return !(
$a $b);
}

function 
ShowAllForms ($prefix$number)
{
    
printf ("<tr><th>%s</th>"$prefix);
    
printf ("<td>%d</td>"$number);
    
printf ("<td>%X</td>"$number);
    
printf ("<td>%o</td>"$number);
    
printf ("</tr>\n");
}

function 
Times ($number)
{
    echo 
"<tr><th>Time</th><th>min:sec</th><th>Days(sec)</th><th>Days(min)</th></tr>\n";
    
printf ("<tr><th>Span</th>");
    
printf ("<td>%d:%02d</td>"$number 60$number 60);
    if (
$number 24 3600) {
        
printf ("<td>%d</td>"$number / (24 3600));
    } else {
        
printf ("<td>&lt; 1 day</td>");
    }
    if (
$number 24 60) {
        
printf ("<td>%d</td>"$number / (24 60));
    } else {
        
printf ("<td>&lt; 1 day</td>");
    }
    
printf ("</tr>\n<tr><th>Date &amp; Time</th><td colspan=\"3\">");
    
printf ("%s</td></tr>\n"strftime ("%Y-%m-%d %H:%M:%S",
        
$number strtotime ("01/01/1970 00:00:00")));
}

$lastPrime 0;
$primeRes 0;

function 
primes ($i)
{
    global 
$lastPrime$primeRes;

    
$lastPrime 0x7FFFFFFF;
    if (!
$primeRes) {
        
$primeRes mysql_query ("select prime from primes");
        if (!
$primeRes) return $lastPrime;
    }
    if (
$i >= mysql_num_rows ($primeRes) || !mysql_data_seek ($primeRes$i)) {
        return 
$lastPrime;
    }
    
$obj mysql_fetch_object ($primeRes);
    
$lastPrime $obj->prime;
    
// echo "|" . $i . "," . $lastPrime . "|\n";
    
return $lastPrime;
}

function 
fact ($start$n)
{
    global 
$lastPrime;

    for (
$i $startprimes ($i) < $n && $lastPrime$i++) {
        if (!(
$n $lastPrime)) {
            return 
$lastPrime "*" fact ($i$n $lastPrime);
        }
    }
    return 
$n;
}

if (isset (
$number)) {
    echo 
"<table border=\"1\" bgcolor=\"90A0B0\">\n";
    echo 
"<tr><th>Test</th><th>Dec</th><th>Hex</th><th>Oct</th></tr>\n";
    
ShowAllForms ("As entered"$num);
    
ShowAllForms ("Binary NOT", (~ $num) & 0x7FFFFFFF);
    if (
divBy ($num666)) {
        
ShowAllForms ("DIV 666"$num 666);
    }
    if (
divBy ($num0x666)) {
        
ShowAllForms ("DIV 0x666"$num 0x666);
    }
    if (
divBy ($num0666)) {
        
ShowAllForms ("DIV 0666"$num 0666);
    }
    
ShowAllForms ("XOR 666"$num 666);
    
ShowAllForms ("XOR 0x666"$num 0x666);
    
ShowAllForms ("XOR 0666"$num 0666);
    if (
$num != 0) {
        
$v $num;
        
$i 0;
        while ((
$v 1) == 0) {
            
$v >>= 1;
            
$i ++;
        }
        if (
$i 0) {
            
ShowAllForms ("2^" $i " *"$v);
        }
    }
    
printf ("<tr><th>Binary</th><td colspan=\"3\">%s</td></tr>\n",
        
decbin ($num));
    
Times ($num);
    
$allowAddNotes 0;
    if (
mysql_con ()) {
        
mysql_query ("insert into usages(num) values (" $num ")");
        if (isset (
$showFact) && $num && $num <= 0x7FFFFFFF) {
            
printf ("<tr><th>Factors:</th><td colspan=\"3\">");
            
printf ("%s</td></tr>\n"fact (0$num));
        }
        
$res mysql_query ("select note from usernotes " .
            
"where number=" $num);
        if (
$res) {
            
$allowAddNotes = (mysql_num_rows ($res) < 10);
            if (isset (
$showUser)) {
                if (
mysql_num_rows ($res) > 0) {
                    echo 
"<tr><th>User notes</th><td colspan=\"3\">";
                    echo 
"<ul>\n";
                    while (
$obj mysql_fetch_object ($res)) {
                        
printf ("<li>%s\n"htmlentities ($obj->note));
                    }
                    echo 
"</ul></td></tr>\n";
                }
            }
            
mysql_free_result ($res);
        }
    }
    echo 
"</table>\n";
    if (
$allowAddNotes) {
        if (isset (
$userNote) && strlen ($userNote) > 0) {
            
$que "insert into usernotes values (";
            
$que $que $num ", ";
            
$que $que "\"" addslashes (stripslashes($userNote)) . "\")";
            
$res mysql_query ($que);
            if (
$res) {
                echo 
"Your note has been added to the database.<br>\n";
            } else {
                echo 
"Sorry, there was a problem adding your note.<br>\n";
            }
        } else {
            echo 
"<br><table border=\"0\" bgcolor=\"F0A0B0\">\n";
            echo 
"<tr><td>If you wish to leave a note concerning this ";
            echo 
"number, enter it here</td><td>\n";
            echo 
"<input type=\"text\" name=\"userNote\"";
            echo 
"size=\"60\" maxlength=\"250\"></td>";
            echo 
"<td><input type=\"submit\" value=\"Enter note\"";
            echo 
" name=\"subNote\"></td></tr></table>\n";
        }
    }
}
</script>
</form>
Any suggestions (for finding interesting properties of numbers, that is)
are welcome in the <a href="http://sourceforge.net/forum/?group_id=26994">
Forum</a>.<br>
<hr>
Click <a href="showMagNum.php">here</a> to see the PHP source, if you're
interested.<p> 
</body>
</html>