Visa ett inlägg
Oläst 2006-08-04, 23:37 #49
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Citat:
Originally posted by Jan Eriksson@Aug 3 2006, 22:06
Koden finns lite överallt på nätet
Ja, det verkar som det är samma kodsnutt som är inbyggd i alla skript som har länkats här. Det verkar i alla fall komma från ett perl-skript från början...
http://www.everyscript.de/PRank.htm

För den som är intresserad, för att räkna ut checksummen går det till som följer (i något komprimerad/optimerad form) med php:
Kod:
function uShiftRight($x,$y){
	if(0x80000000&$x) return ($x>>1 & 0x7FFFFFFF | 0x40000000) >> --$y; else return $x >> $y;
}

function urlCheckSum($url) {
	$shifts = array(13,8,13,12,16,5,3,10,15);
	$a = $b = 0x9E3779B9;
	$c = 0xE6359A60;
	$k = 0;
	$len=strlen($url);
	while($len>=12){
 $a += ord($url{$k++}) + (ord($url{$k++})<<8) + (ord($url{$k++})<<16) + (ord($url{$k++})<<24);
 $b += ord($url{$k++}) + (ord($url{$k++})<<8) + (ord($url{$k++})<<16) + (ord($url{$k++})<<24);
 $c += ord($url{$k++}) + (ord($url{$k++})<<8) + (ord($url{$k++})<<16) + (ord($url{$k++})<<24);
 $n=0;
 while($n<9) {
 	$a = ($a-$b-$c) ^ uShiftRight($c,$shifts[$n++]);
  $b = ($b-$a-$c) ^ $a<<$shifts[$n++];
  $c = ($c-$a-$b) ^ uShiftRight($b,$shifts[$n++]);
 }
 $len -= 12;
	}
 	$c += strlen($url);
	switch($len){
 case 11: $c += ord($url{$k+10}) << 24;
 case 10: $c += ord($url{$k+9}) << 16;
 case 9: $c += ord($url{$k+8}) << 8;
 case 8: $b += ord($url{$k+7}) << 24;
 case 7: $b += ord($url{$k+6}) << 16;
 case 6: $b += ord($url{$k+5}) << 8;
 case 5: $b += ord($url{$k+4});
 case 4: $a += ord($url{$k+3}) << 24;
 case 3: $a += ord($url{$k+2}) << 16;
 case 2: $a += ord($url{$k+1}) << 8;
 case 1: $a += ord($url{$k});
	}
	$n=0;
	while($n<9) {
 $a = ($a-$b-$c) ^ uShiftRight($c,$shifts[$n++]);
 	$b = ($b-$a-$c) ^ $a<<$shifts[$n++];
 	$c = ($c-$a-$b) ^ uShiftRight($b,$shifts[$n++]);
	}
	return sprintf("6%u",$c);
}
Det är bara att kalla urlCheckSum() med domännamnet.
martine är inte uppkopplad   Svara med citatSvara med citat