View Single Post
Old 06-27-2004, 08:52 AM   #87
doctorow
Guru
doctorow ought to be getting tired of karma fortunes by now.doctorow ought to be getting tired of karma fortunes by now.doctorow ought to be getting tired of karma fortunes by now.doctorow ought to be getting tired of karma fortunes by now.doctorow ought to be getting tired of karma fortunes by now.doctorow ought to be getting tired of karma fortunes by now.doctorow ought to be getting tired of karma fortunes by now.doctorow ought to be getting tired of karma fortunes by now.doctorow ought to be getting tired of karma fortunes by now.doctorow ought to be getting tired of karma fortunes by now.doctorow ought to be getting tired of karma fortunes by now.
 
doctorow's Avatar
 
Posts: 914
Karma: 3410461
Join Date: May 2004
Device: Kindle Touch
The Google Checksum Calculator, by Alex Stapleton, Andy Doctorow, Vijay "Cyberax" Bhatter, and a few others.

PHP Code:
<?php 
/* 
    This code is released unto the public domain 
*/ 
header("Content-Type: text/plain; charset=utf-8"); 
define('GOOGLE_MAGIC'0xE6359A60); 

//unsigned shift right 
function zeroFill($a$b

    
$z hexdec(80000000); 
        if (
$z $a
        { 
            
$a = ($a>>1); 
            
$a &= (~$z); 
            
$a |= 0x40000000
            
$a = ($a>>($b-1)); 
        } 
        else 
        { 
            
$a = ($a>>$b); 
        } 
        return 
$a



function 
mix($a,$b,$c) { 
  
$a -= $b$a -= $c$a ^= (zeroFill($c,13)); 
  
$b -= $c$b -= $a$b ^= ($a<<8); 
  
$c -= $a$c -= $b$c ^= (zeroFill($b,13)); 
  
$a -= $b$a -= $c$a ^= (zeroFill($c,12)); 
  
$b -= $c$b -= $a$b ^= ($a<<16); 
  
$c -= $a$c -= $b$c ^= (zeroFill($b,5)); 
  
$a -= $b$a -= $c$a ^= (zeroFill($c,3));   
  
$b -= $c$b -= $a$b ^= ($a<<10); 
  
$c -= $a$c -= $b$c ^= (zeroFill($b,15)); 
   
  return array(
$a,$b,$c); 


function 
GoogleCH($url$length=null$init=GOOGLE_MAGIC) { 
    if(
is_null($length)) { 
        
$length sizeof($url); 
    } 
    
$a $b 0x9E3779B9
    
$c $init
    
$k 0
    
$len $length
    while(
$len >= 12) { 
        
$a += ($url[$k+0] +($url[$k+1]<<8) +($url[$k+2]<<16) +($url[$k+3]<<24)); 
        
$b += ($url[$k+4] +($url[$k+5]<<8) +($url[$k+6]<<16) +($url[$k+7]<<24)); 
        
$c += ($url[$k+8] +($url[$k+9]<<8) +($url[$k+10]<<16)+($url[$k+11]<<24)); 
        
$mix mix($a,$b,$c); 
        
$a $mix[0]; $b $mix[1]; $c $mix[2]; 
        
$k += 12
        
$len -= 12
    } 

    
$c += $length
    switch(
$len)              /* all the case statements fall through */ 
    

        case 
11$c+=($url[$k+10]<<24); 
        case 
10$c+=($url[$k+9]<<16); 
        case 
$c+=($url[$k+8]<<8); 
          
/* the first byte of c is reserved for the length */ 
        
case $b+=($url[$k+7]<<24); 
        case 
$b+=($url[$k+6]<<16); 
        case 
$b+=($url[$k+5]<<8); 
        case 
$b+=($url[$k+4]); 
        case 
$a+=($url[$k+3]<<24); 
        case 
$a+=($url[$k+2]<<16); 
        case 
$a+=($url[$k+1]<<8); 
        case 
$a+=($url[$k+0]); 
         
/* case 0: nothing left to add */ 
    

    
$mix mix($a,$b,$c); 
    
/*-------------------------------------------- report the result */ 
    
return $mix[2]; 


//converts a string into an array of integers containing the numeric value of the char 
function strord($string) { 
    for(
$i=0;$i<strlen($string);$i++) { 
        
$result[$i] = ord($string{$i}); 
    } 
    return 
$result

// [url]http://www.example.com/[/url] - Checksum: 6540747202 
$url 'info:'.$_GET['url']; 
print(
"url:\t{$_GET['url']}\n"); 
$ch GoogleCH(strord($url)); 
printf("ch:\t6%u\n",$ch); 
?>
doctorow is offline   Reply With Quote