Gut ich hab die Lösung auch soweit... Muss sie noch in PHP umsetzen
![Wink](https://www.php-resource.de/forum/core/images/smilies/wink.gif)
<?php
if(!isSet($_GET['string']) || empty($_GET['string'])) die();
/*
** Konvertiert ein Zeichen in den Code
** Zuerst wird der ermittelte ASCII Wert des Zeichens durch 9 geteilt!
** Sollte das Ergebniss keine Nachkommastellen haben ist die Code "9", andernfalls traegt der den Wert der 1. Nachkommastelle
*/
function chrToCrypt($chr)
{
$code = ord($chr)/9;
$code = is_int($code) ? "9" : substr($code, (strpos($code, ".")+1), 1);
return $code;
}
/*
** Konvertiert einen String in einen Hash-Code
** Wie genau muesst ihr euch schon selber ansehen
*/
function cryptString($str)
{
// Der String wird alle 9 Zeichen 'geteilt' und in ein Array geschrieben
$splitted = str_split($str, 9);
// Ein String mit 10 Zeichen wuerde 2 Arrays fuellen, das 2. jedoch nur mit einem Zeichen
// Daher wird das letzte Array 'aufgefuellt' und zwar indem der String wiederholt wird
$entry = count($splitted)-1;
$splitted[$entry] = substr(str_repeat($splitted[$entry], 9), 0, 9);
// Nun wird jeder einzelne Buchstabe durch die entsprechende Code Ziffer ersetzt
foreach($splitted as $string)
{
$cplstring = "";
for($i=0;$i<=8;$i++)
{
$chr = substr($string, $i, 1);
$cplstring .= chrToCrypt($chr);
}
$crypted[] = $cplstring;
}
return $crypted;
}
print_r(cryptString($_GET['string']));
?>
<?php
function cryptbis9($string){
$crypted = "";
for($i=0;$i<strlen($string);$i++){
$sign = ord($string{$i}) % 9;
$sign = ($sign == 0) ? 9 : $sign;
$crypted .= $sign;
} // for
if(strlen($crypted) < 9) $crypted = substr(str_repeat($crypted,9),0,9);
return $crypted;
} //cryptbis9
function cryptab10($string){
$crypted = "";
$tupellength = floor((strlen($string) / 9)+1);
if(floor(strlen($string)/$tupellength) < 9){
$addstring = (((9 - floor(strlen($string)/$tupellength)) * $tupellength)-(strlen($string)%$tupellength));
$string .= substr($string,0,$addstring);
} //if
for($i=0;$i<(strlen($string)/$tupellength);$i++){
$zcrypted = 0;
$k = $i*$tupellength;
for($j=0;$j<$tupellength;$j++){
$sign = ord($string{($k+$j)}) % 9;
$sign = ($sign == 0) ? 9 : $sign;
$zcrypted += $sign;
} //for
$zcrypted = $zcrypted % 9;
$zcrypted = ($zcrypted == 0) ? 9 : $zcrypted;
$crypted .= (string) $zcrypted;
} //for
if(strlen($crypted) < 9) $crypted = substr(str_repeat($crypted,9),0,9);
return $crypted;
} //cryptab10
if(isset($_GET['string'])) echo (strlen($_GET['string']) > 9) ? cryptab10($_GET['string']) : cryptbis9($_GET['string']);
?>
function hash(Source) {
var HashBase = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
var WorkingSource = Source;
var Hash = '';
var Counter = 0;
while((WorkingSource.length % 32) != 0) {
if(Counter > WorkingSource.length) {
Counter = 0;
}
WorkingSource = WorkingSource + WorkingSource.substr(Counter, 1);
Counter++;
}
while((WorkingSource.length % 32) != 0) {
WorkingSource = WorkingSource.substr(0, WorkingSource.length - 1);
}
var CharsPerPart = WorkingSource.length / 32;
for(var i = 0; i < 32; i++) {
var SubPart = WorkingSource.substr(i*CharsPerPart, CharsPerPart);
var PartCode = 0;
for(var j = 0; j < SubPart.length; j++) {
PartCode = PartCode + HashBase.indexOf(SubPart.substr(j, 1));
}
if(i != 0) {
PartCode = PartCode*i;
}
PartCode = PartCode + HashBase.indexOf(Hash.length, 1) * Source.length;
while(PartCode > HashBase.length) {
PartCode = PartCode - HashBase.length;
}
while(PartCode < 0) {
PartCode++;
}
if(HashBase.substr(PartCode, 1) == 'undefined') {
Hash = Hash + HashBase.substr(i, 1);
} else {
Hash = Hash + HashBase.substr(PartCode, 1);
}
}
return Hash;
}
<?php
function hashMe($sToHash) {
if(strlen($sToHash) == 0) {
return false;
}
if(strlen($sToHash) < 9) {
// Weniger als 9 Zeichen
$iRound = 0;
while(strlen($sToHash) < 9) {
$sToHash.= $sToHash[$iRound];
$iRound++;
}
} elseif(strlen($sToHash) == 9) {
// Genau 9 Zeichen
} elseif(strlen($sToHash) > 9) {
// Mehr als 9 Zeichen
$iRest = strlen($sToHash) % 9;
$iToFill = 9 - $iRest;
for($i = 0; $i < $iToFill; $i++) {
$sToHash.= $sToHash[$i];
}
}
// Chunk-Size
$iChunkSize = strlen($sToHash) / 9;
// Wieviel Chunks haben wir
$iChunkCount = strlen($sToHash) / $iChunkSize;
// Chunks berechnen
for($i = 0; $i < $iChunkCount; $i++) {
// Chunk holen
$sChunk = substr($sToHash, $i * $iChunkSize, $iChunkSize);
$iDigit = 0;
// Direkten Chunkwert ermitteln
for($j = 0; $j < strlen($sChunk); $j++) {
$iDigit = $iDigit + ord($sChunk[$j]);
}
while($iDigit >= 10) {
$iDigit = quersumme($iDigit);
}
// Speichern
$iHash.= $iDigit;
unset($iDigit);
}
// Ausgeben
return $iHash;
}
function quersumme($iZahl) {
$sZahl = (string) $iZahl;
for($i = 0; $i < strlen($sZahl); $i++) {
$iOutput = $iOutput + (int) $sZahl[$i];
}
return $iOutput;
}
?>
Kommentar