begin process at 2012 05 30 20:35:29
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Débutant(e)

 > 

Modulo


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Modulo

jeudi 6 juillet 2006 à 18:59:44 | Modulo

Genjinophil

voila je fais une petite fonction  ce verification de rib avec le modulo "%"
mais je comprend pas pourquoi il y a une erreur de calcul !


Voila ma petite fonction ( sans les chiffres )
 //---verif RIB
 $test = 0;
 $numbanq = " ";
 $numgui = " ";
 $numcpt = " ";
 $numcle = 77;

  // Conversion du numero de compte en chiffres
 $pattern = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
 $repl =    array('1', '2', '3', '4', '5', '6', '7', '8', '9', '1', '2', '3', '4', '5', '6', '7', '8', '9', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
$numcpt = str_replace( $pattern, $repl, $numcpt);
$test = $numbanq.$numgui.$numcpt.'00';
$valrib = $test % 97 ;
$valrib = 97 - $valrib;

En fin  de fonction j'obtien :
97 - 65 = 32
au lieu de :
97 - 20 = 77

pourtant j'ai verifié avec une calculette scientifique en utilisant la valeur de $test et le resultat est bon !!

vendredi 7 juillet 2006 à 07:28:26 | Re : Modulo

malalam

Administrateur CodeS-SourceS
Hello,

le problème n'est pas le modulo, mais ton str_replace().
Il fonctionne, avec 2 tableaux, de façons "incrémentale"...Bref, les modifications s'appliquent en temps réel. Il essaye de remplacer la 1ère valeur, puis passe à la seconde...en testant le résultat de la 1ère. Ta chaîne est revérifiée à chaque incrément.
Bon ce n'est pas clair, je te donne un exemple d'un commentaire sur php.net :

<?php
$search = array("one", "two", "three");
$replace = array("two", "three", "one");
$subject = "one two three";
echo str_replace($search, $replace, $subject). "<br>";
// echoes "one one one"
?>

c'est ce qui se passe dans ton cas.
vendredi 7 juillet 2006 à 15:00:42 | Re : Modulo

Genjinophil

bonjour
En fait je me suis pris la tete mais finalement j'ai trouvé ma réponse et donc j'en profite pour la donner on sait jamais ca peut être utile

Le serveur PHP ( interne ou sur proxad ) revoit pour pour les nombres d'une taille supérieure  à  1.000.000.000  la formulation scientifique par exemple 3,0004E+13

Et quand on applique le calcul % 97 ou tout autres calcul avec le modulo [ à verifier faut dire que j'ai pas pris le temps pour cela =) ] cela renvois un résultat erroné, donc j'ai applique la solution a l'emporte piece suivante, je donne le code brut dans le plus pur style cobol ou kobold

hop hop de la variable pour agrémenter
$numbanq = "Ma variable";
$numgui = "Ma variable";
$numcpt = "Ma variable";
$numcle = Ma variable;

Je nettoie le compte bancaire, pour ce qui est de ma fonction de remplacement elle fonctionne très bien car je fais en fait , oui je suis paranoïaque =)
//---TOUT METTRE EN MAJ
printf("Mettre tout en MAJ $numcpt <br>");
$numcpt = strtoupper($numcpt);
printf("Verif Cpt BQ avant $numcpt <br>");
//---Conversion des lettres du numero de compte en chiffres
$pattern = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
$repl = array('1', '2', '3', '4', '5', '6', '7', '8', '9', '1', '2', '3', '4', '5', '6', '7', '8', '9', '2', '3', '4', '5', '6', '7', '8', '9');
$numcpt = str_replace( $pattern, $repl, $numcpt);
printf("Verif Cpt BQ apres $numcpt <br>");

Cela me permet de bien verifier que le la conversion a été bonne , et je ne tente pas de remplacer les chiffres par des chiffres

La je hache un peut et je fais des concatenations successives
$valrib = $numbanq % 97;
printf("Calcul 1 = $valrib <br>");

$valrib = $valrib.$numgui;
printf("CConcat 1 = $valrib <br>");

$valrib = $valrib % 97;
printf("Calcul 2 = $valrib <br>");

$numcp1 = substr($numcpt, 0, 5);
printf("Decoup Cpt1 = $numcp1 <br>");

$numcp2 = substr($numcpt, 5, 11);
printf("Decoup Cpt2 = $numcp2 <br>");

$valrib = $valrib.$numcp1;
printf("CConcat 2 = $valrib <br>");

$valrib = $valrib % 97;
printf("Calcul 3 = $valrib <br>");

$valrib = $valrib.$numcp2;
printf("CConcat 3 = $valrib <br>");

$valrib = $valrib % 97;
printf("Calcul 4 = $valrib <br>");

$valrib = $valrib.'00' ;
printf("CConcat 4 = $valrib <br>");

$valrib = $valrib % 97;
printf("Calcul 5 = $valrib <br>");

$valrib = 97 - $valrib;p
rintf("Calcul Final = $valrib <br>");

une petit verification avant de faire la suite de ce pourquoi cela a été prévus
if ( $valrib == $numcle )
{
printf("Bravo Ma clé RIB est $numcle le calcul donne $valrib");
} else {
printf("PdB un problème la clé RIB est $numcle le calcul donne $valrib");
}

Et la cela fonctionne nickel chrome , bon c'est sur le code est un peu gras, mais je compte de l'alléger en me servant des priorités des opérateurs, tous les affichages sont bien sur à éliminer.

Voilou en espérant que cela serve.



Cette discussion est classée dans : fonction, test, modulo, numcpt, valrib


Répondre à ce message

Sujets en rapport avec ce message

Fonction variable [ par braunt ] Bonsoir,Je cherche un petit truc , probablement smple mais la memoire flancheJ'ai une variable qui contient$var= '>100'Et je voudrai pouvoir integrer Fonction rename [ par zzzzzz ] Bonjour,J'ai un fichier test.php avec de contenu :rename('/temp/test.txt', '/files/test.txt');?>Il y a bien les 2 répertoires de créé test et files... Redirection dans une fonction [ par mirc00 ] salut,j'ai une fonction test et je souhaite la transformer comme suit :function test(){...if($query)        {            ...            $return='1|Mer Retourner un require dans une fonction [ par agparchitecture ] Bonjour à tous,Je m'amuse un peu avec php pour le moment et je me pose une question.Dans le cas ou je définit un fonction dans laquelle il existe un r Test de la fonction mail en local [ par quimix ] bonjour a tous,voila j'aimerais savoir comment faire pour tester la fonction mail() en local .sachant que dans le fichier php.ini, J'ai utiliser le sm Fonction mail au secours !!! [ par guillaumelengen ] Gros blème Je tape cela : if (mail(guibou@netplus.ch,"test","On test la fonction mail","header") { mail envoyé } else { mail pas envoyé } ?>et il me onsubmit [ par moi zork ] bonjour, voila je voudrais savoir comment faire pour que :     - si la fonction test renvoye true et bien on peux e Expressions régulières [ par darkduck ] Salut,J'aimerai virer les - entre chevrons grace à une expression régulière.Je m'explique :-texte>test-test-texte>-joli-texte>y-a-t-il quelqu'un-</b [astuce] tester un lien, pour savoir s'il est mort [ par franco_se ] salutVoila, j'ai une petite fonction qui traine depuis qlq temps ds mes scripts. Elle permet de tester tout simplement si un lien est mort ou non.Mais Caractères spéciaux & Securité ? [ par supergrey ] Bonjour, je galère un peu avec les fonction htmlentities, htmlspecialchar, html decode etc...En fait sur mon site on peut mettre des commentaires et c


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,808 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales