Bavardages » Générer une communication structurée
Générer une communication structurée
Published 13/08/2006 @ 15:13:48,
By rfrPour un petit projet, j'aurais besoin de généré une communication structurée pour des virements bancaire.
Quelqu'un a une idée de l'algorithme ?
Merci!
Quelqu'un a une idée de l'algorithme ?
Merci!
To die is a time consuming activity, it often takes a lifetime (but some are faster than others ... though)
Générer une communication structurée
Published 13/08/2006 @ 15:21:07,
By zionSi ma mémoire est bonne, tu peux mettre ce que tu veux, sauf que les 2 derniers chiffres sont un modulo du reste (par 93 ou 97 je sais plus).
Suffit de trouver 2 communications et le mystère est résolu
Suffit de trouver 2 communications et le mystère est résolu

Je suis le Roy

Générer une communication structurée
Published 13/08/2006 @ 15:23:16,
By zionPremière trouvée: 354/2232/80695
Deuxième: 000/0000/00707
Troisième: 644/0102/39216
Alors, voyons maintenant ce que ca donne
Deuxième: 000/0000/00707
Troisième: 644/0102/39216
Alors, voyons maintenant ce que ca donne
Je suis le Roy

Générer une communication structurée
Published 13/08/2006 @ 15:23:43,
By zionModulo 97 ca roulaize

Je suis le Roy

Générer une communication structurée
Published 13/08/2006 @ 15:34:34,
By rfrJ'ai trouvé
Voici l'algorithme, c'est comme pour les comptes bancaires:
communication structurée : 12 pos numériques : 10 + 2 (modulo 97)
si le reste de la division == 00 => remplacer par 97

communication structurée : 12 pos numériques : 10 + 2 (modulo 97)
si le reste de la division == 00 => remplacer par 97
To die is a time consuming activity, it often takes a lifetime (but some are faster than others ... though)
Générer une communication structurée
Published 13/08/2006 @ 15:37:03,
By zionEt je disais quoi moi?


Je suis le Roy

Générer une communication structurée
Published 13/08/2006 @ 16:20:29,
By rfrMerci aussi!
Par contre, mon code php pour en générer une ne marche pas
damn, le calcul du modulo n'est pas bon ... Pourtant mon algorithme de check pour le numéros de compte lui fonctionne parfaitement.

Par contre, mon code php pour en générer une ne marche pas

To die is a time consuming activity, it often takes a lifetime (but some are faster than others ... though)
Générer une communication structurée
Published 13/08/2006 @ 16:30:56,
By rfrdes int sur 32 bits ... quelle idée ...
To die is a time consuming activity, it often takes a lifetime (but some are faster than others ... though)
Générer une communication structurée
Published 13/08/2006 @ 23:17:26,
By rfrBon ben au cas ou quelqu'un voudrait sortir la même chose ... voici un code qui fonctionne ...
function generate_structured_communication($transactionID) {
$control = bcmod($transactionID, 97);
$control = ($control == "0") ? "97" : $control;
if ($control < 10) {
$control = "0" . $control;
}
$count = 10 - strlen($transactionID);
for ($i=0; $i < $count; $i++) {
$transactionID = "0" . $transactionID;
}
$com = $transactionID . $control;
return substr($com, 0, 3) . "/" . substr($com, 3, 4) . "/" . substr($com, 7, 5);
}
edit: pour faire plaisir à philfr
Latest Edition: 14/08/2006 @ 11:18:27
function generate_structured_communication($transactionID) {
$control = bcmod($transactionID, 97);
$control = ($control == "0") ? "97" : $control;
if ($control < 10) {
$control = "0" . $control;
}
$count = 10 - strlen($transactionID);
for ($i=0; $i < $count; $i++) {
$transactionID = "0" . $transactionID;
}
$com = $transactionID . $control;
return substr($com, 0, 3) . "/" . substr($com, 3, 4) . "/" . substr($com, 7, 5);
}
edit: pour faire plaisir à philfr

Latest Edition: 14/08/2006 @ 11:18:27
To die is a time consuming activity, it often takes a lifetime (but some are faster than others ... though)
Générer une communication structurée
Published 14/08/2006 @ 09:02:50,
By cauetBon ben au cas ou quelqu'un voudrait sortir la même chose ... voici un code qui fonctionne ...
function generate_structured_communication($transactionID) {
$base = (float) $transactionID;
$control = $base - floor($base / 97) * 97;
if ($control == 0) {
$control = 97;
}
$base_s = (string) $base;
$control_s = (string) $control;
if ($control < 10) {
$control_s = "0" . $control_s;
}
$base_len = strlen($base_s);
$count = 10 - $base_len;
for ($i=0; $i < $count; $i++) {
$base_s = "0" . $base_s;
}
$com = $base_s . $control_s;
return substr($com, 0, 3) . "/" . substr($com, 3, 4) . "/" . substr($com, 7, 5);
}
function generate_structured_communication($transactionID) {
$base = (float) $transactionID;
$control = $base - floor($base / 97) * 97;
if ($control == 0) {
$control = 97;
}
$base_s = (string) $base;
$control_s = (string) $control;
if ($control < 10) {
$control_s = "0" . $control_s;
}
$base_len = strlen($base_s);
$count = 10 - $base_len;
for ($i=0; $i < $count; $i++) {
$base_s = "0" . $base_s;
}
$com = $base_s . $control_s;
return substr($com, 0, 3) . "/" . substr($com, 3, 4) . "/" . substr($com, 7, 5);
}
Merci braimmain!
J'allais justement devoir faire ca das les jours à venir..
Générer une communication structurée
Published 14/08/2006 @ 09:14:26,
By philfr
Générer une communication structurée
Published 14/08/2006 @ 09:29:34,
By cauetdans le même genre (pour les chèques)
function convertitNombreEnLettres($nombreAConvertir)
{
$tablePuissancesDeDix = array("", "mille", "millions", "milliards");// ce qu'on affichera apres chaque serie de trois
$tableConversionEtapeDeux = array("", "dix", "vingt", "trente", "quarante", "cinquante", "soixante", "septante", "quatre-vingt", "nonente");// equivalent du second chiffre de la serie de 3 (la dizaine)
$tableConversionEtapeUnOuTrois = array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf");// equivalent du premier et du troisieme chiffre de la serie de 3
$tableConversionDeLaDizaineQuiFaitChier = array("", "onze", "douze", "treize", "quatorze", "quinze", "seize");
$nombreAConvertir = number_format($nombreAConvertir);// on formate le nombre "a l'anglaise" avec des virgules entre les milliers
$tableauTemporaire = explode(',', $nombreAConvertir);// on passe les milliers dans un tableau
for($i=0; $i<count($tableauTemporaire); $i++)// on parcourt le tableau, par milliers donc
{
for($j=0; $j<strlen($tableauTemporaire[$i]); $j++)// on parcourt les 3 caracteres (ou moins) du millier en cours
{
switch($j)
{
case strlen($tableauTemporaire[$i])-3://si on est dans les centaines
if(substr($tableauTemporaire[$i], $j, 1) > 0)
{
if(substr($tableauTemporaire[$i], $j, 1) > 1)
echo $tableConversionEtapeUnOuTrois[substr($tableauTemporaire[$i], $j, 1)];
echo " cents ";
}
break;
case strlen($tableauTemporaire[$i])-2:// si on est dans les dizaines
if(substr($tableauTemporaire[$i], $j, 1) > 1)
echo $tableConversionEtapeDeux[substr($tableauTemporaire[$i], $j, 1)];
if(substr($tableauTemporaire[$i], $j, 1) == 1 || substr($tableauTemporaire[$i], $j, 1) == 7 || substr($tableauTemporaire[$i], $j, 1) == 9)
break;
case strlen($tableauTemporaire[$i])-1:// si on est dans les unites
if(substr($tableauTemporaire[$i], $j, 1) == 1)
echo " et ";
if(substr($tableauTemporaire[$i], $j-1, 1) == 1 ||substr($tableauTemporaire[$i], $j-1, 1) == 7 || substr($tableauTemporaire[$i], $j-1, 1) == 9)
if(substr($tableauTemporaire[$i], $j, 1) < 7)
echo "-".$tableConversionDeLaDizaineQuiFaitChier[substr($tableauTemporaire[$i], $j, 1)];
else
echo "-".$tableConversionEtapeUnOuTrois[substr($tableauTemporaire[$i], $j, 1)];
else
echo "-".$tableConversionEtapeUnOuTrois[substr($tableauTemporaire[$i], $j, 1)];
break;
}
}
echo " ".$tablePuissancesDeDix[count($tableauTemporaire)-$i-1]." ";// à quelle multiple de 10^3 on est ?
}
}
convertitNombreEnLettres(124036977);
function convertitNombreEnLettres($nombreAConvertir)
{
$tablePuissancesDeDix = array("", "mille", "millions", "milliards");// ce qu'on affichera apres chaque serie de trois
$tableConversionEtapeDeux = array("", "dix", "vingt", "trente", "quarante", "cinquante", "soixante", "septante", "quatre-vingt", "nonente");// equivalent du second chiffre de la serie de 3 (la dizaine)
$tableConversionEtapeUnOuTrois = array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf");// equivalent du premier et du troisieme chiffre de la serie de 3
$tableConversionDeLaDizaineQuiFaitChier = array("", "onze", "douze", "treize", "quatorze", "quinze", "seize");
$nombreAConvertir = number_format($nombreAConvertir);// on formate le nombre "a l'anglaise" avec des virgules entre les milliers
$tableauTemporaire = explode(',', $nombreAConvertir);// on passe les milliers dans un tableau
for($i=0; $i<count($tableauTemporaire); $i++)// on parcourt le tableau, par milliers donc
{
for($j=0; $j<strlen($tableauTemporaire[$i]); $j++)// on parcourt les 3 caracteres (ou moins) du millier en cours
{
switch($j)
{
case strlen($tableauTemporaire[$i])-3://si on est dans les centaines
if(substr($tableauTemporaire[$i], $j, 1) > 0)
{
if(substr($tableauTemporaire[$i], $j, 1) > 1)
echo $tableConversionEtapeUnOuTrois[substr($tableauTemporaire[$i], $j, 1)];
echo " cents ";
}
break;
case strlen($tableauTemporaire[$i])-2:// si on est dans les dizaines
if(substr($tableauTemporaire[$i], $j, 1) > 1)
echo $tableConversionEtapeDeux[substr($tableauTemporaire[$i], $j, 1)];
if(substr($tableauTemporaire[$i], $j, 1) == 1 || substr($tableauTemporaire[$i], $j, 1) == 7 || substr($tableauTemporaire[$i], $j, 1) == 9)
break;
case strlen($tableauTemporaire[$i])-1:// si on est dans les unites
if(substr($tableauTemporaire[$i], $j, 1) == 1)
echo " et ";
if(substr($tableauTemporaire[$i], $j-1, 1) == 1 ||substr($tableauTemporaire[$i], $j-1, 1) == 7 || substr($tableauTemporaire[$i], $j-1, 1) == 9)
if(substr($tableauTemporaire[$i], $j, 1) < 7)
echo "-".$tableConversionDeLaDizaineQuiFaitChier[substr($tableauTemporaire[$i], $j, 1)];
else
echo "-".$tableConversionEtapeUnOuTrois[substr($tableauTemporaire[$i], $j, 1)];
else
echo "-".$tableConversionEtapeUnOuTrois[substr($tableauTemporaire[$i], $j, 1)];
break;
}
}
echo " ".$tablePuissancesDeDix[count($tableauTemporaire)-$i-1]." ";// à quelle multiple de 10^3 on est ?
}
}
convertitNombreEnLettres(124036977);
Générer une communication structurée
Published 14/08/2006 @ 11:22:37,
By rfrVoilà philfr, édité ... t'es content


To die is a time consuming activity, it often takes a lifetime (but some are faster than others ... though)
Générer une communication structurée
Published 14/08/2006 @ 13:10:14,
By philfrPasser par des floats pour faire des calculs entiers c'est

D'ailleurs tu risques toujours des erreurs d'arrondi.
Même pour les entiers normaux, il y a un opérateur modulo. Tu peux donc remplacer ton code
$control = $base - floor($base / 97) * 97;
par
$control = $base % 97
Et avec un minimum de mathématiques, tu n'as besoin de rien de plus que les entiers 32 bits:
soit le compte aaa-bbbbbbb-XX. La valeur aaabbbbbbb peut d'écrire aaa * 10000000 + bbbbbbb.
Il suffit donc de calculer 10000000%97 = 76 et de faire le calcul
(76*aaa+bbbbbbb)%97 qui passera toujours en 32 bits...
Un exemple ?
123-4567890-XX
76*123+4567890=4577238
4577238 % 97 = 2
Or 1234567890 % 97 = 2
CQFD.
Générer une communication structurée
Published 14/08/2006 @ 14:41:21,
By rfrsauf que $control = $base % 97 en php tu peux te brosser, ça marche pas j'ai essayé

To die is a time consuming activity, it often takes a lifetime (but some are faster than others ... though)
Générer une communication structurée
Published 14/08/2006 @ 15:49:40,
By philfrJe fais que lire la doc moi, hein...
Je ne programme pas en PHP, mais l'opérateur modulo existe dans tous les langages dignes de ce nom.
Et pourquoi ça marche pas chez toi ?
Edit:
Chez moi, ça ça marche:
Latest Edition: 14/08/2006 @ 16:04:01
Je ne programme pas en PHP, mais l'opérateur modulo existe dans tous les langages dignes de ce nom.
Et pourquoi ça marche pas chez toi ?
Edit:
Chez moi, ça ça marche:
<?php
$a = 1234567890;
echo $a % 97;
?>
$a = 1234567890;
echo $a % 97;
?>
Latest Edition: 14/08/2006 @ 16:04:01
Générer une communication structurée
Published 14/08/2006 @ 16:16:20,
By zionJe ne programme pas en PHP, mais l'opérateur modulo existe dans tous les langages dignes de ce nom.
Troll poilu


Je suis le Roy

Générer une communication structurée
Published 14/08/2006 @ 16:19:12,
By rfrphilfr> je suis un vrai informaticien moi monsieur. Par définition, je suis donc féneiant et adepte de la règle KISS ...
C'est vrai pour les float mais n'ayant trouvé les float et n'étant pas expert en PHP ...
C'est vrai pour les float mais n'ayant trouvé les float et n'étant pas expert en PHP ...
To die is a time consuming activity, it often takes a lifetime (but some are faster than others ... though)
Générer une communication structurée
Published 16/08/2006 @ 12:54:37,
By BulleMais quelle orthographe !

M'étonne qu' H2G2 n'ait pas encore tiqué

Pour retenir : fainéant < "fait néant", suffit de bouger le 1e "t"
Latest Edition: 16/08/2006 @ 13:04:43
It's true that we don't know what we've got 'til it's gone, but it's also true that we don't know what we've been missing until it arrives.