Jump to content
  • 0

Calcul Suisse Modulo 10 Ou 11 Récursif


auarstadtt
 Share

Question

bonjour,

je viens à nouveau vers vous car je suis vétérinaire et pas informaticien à la base. je dois intégrer dans ma solution de gestion de cabinets vétérinaires, on module suisse qui imprime ce que nous appelons ici des bulletins de versement. donc avec des chiffres du genre :

01 (code) 00003949753 (montant) numéro de référence de 16 à 27 chiffres libre à notre choix puis un chiffre appelé chiffre clé calculé selon la méthode du modulo 10 ou 11. j'ai trouvé une formule simple en Perl (c'est quoi ???) adaptée du C++ mais comment l'intégrer ou la convertif en language FM ?

sub mod10 { # take number without control digit, return control digit my @nums = split //, shift; my @T = (0, 9, 4, 6, 8, 2, 7, 1, 3, 5); my $n = 0; for (@nums) { $n = $T[ ($n + $_) % 10 ]; } return (10 - $n) % 10;}

en gros dois-je juste la recopier ou cela ne va pas fonctionner (j'entends bien modifier les arguments) mais la fonction mod est la même ? et c'est quoi la différence entre 10 et 11 ?

merci mille fois.

Antoine Adam

Link to comment
Share on other sites

21 answers to this question

Recommended Posts

  • 0

surtout que nous sommes sèécialisés dans les palpations... mais stop. non prennez le bien car ce forum est démentiel et sans lui je n'aurais jamais pu créer ma solution qui tourne et s'améliore depuis 10 ans... je ne comprends pas tout mais je pompe pas mal. et quand j'oserai et j'aurai le temps je viendrai à la fm conférence. j'avais failli à lyon mais peur de ne rien capter...

Link to comment
Share on other sites

  • 0

Bonjour,

ton problème s'appelle l'algorithme de Luhn (Hans Peter pour les intimes)

Tu trouveras ici une première fonction personnalisée principale Luhn (number) qui fait appel aux sous-fonctions

-LuhnDoubleEven ( makeEven )

-LuhnProduct ( doubleEven )

et une autre, bien plus maladroite encore:

LuhnCheckDigit ( SeedNumber )

à moins que cette fonction personnalisée fasse l'affaire ...

// rfn_LuhnCheckSum (number )Cas(	Longueur( number ) > 1;	rfn_LuhnCheckSum( Debut( number; Longueur( number ) - 2 ) ) +	Definir(		even = Extrait( Fin( number; 2 ); 1; 1 ) * 2;		even - Si( even > 9; 9 )	) +	Fin( number; 1 ))/* ----------usage:Definir(	[		num = Si( Mod( Input; 2 ) <> 0; "0" ) & Input;		chks = rfn_LuhnCheckSum( num )	];	Si( Not Mod( chks; 10 ); "Valid"; "Invalid" ))---------- */
c'est quoi la différence entre 10 et 11

le 11 doit être, ou ne peut être que Suisse :) ... inconnu de l'autre côté de la frontière parce que trop cher.

La seule chose que l'on connaisse qui fasse 10 ou 11 ... c'est le pinard !!!!!!!

hth

Link to comment
Share on other sites

  • 0

je ne suis pas doué mais quand je rentre cette fonction avec number comme paramètre supplémentaire il me dit ne pas reconnaitre "rfn_LuhnCheckSum" dois je aussi le mettre comme paramètre ? et il m'emmerde ensuite avec des paranthèses pas comme il veut. vu que je fais du bête recopiage je ne sais trop quoi changer... et dois-je séparer en deux la partie cas et la partie usage ? j'avoue ne pas avoir tout compris cela non plus. désolé !

Antoine

Link to comment
Share on other sites

  • 0

bon et bien avec tes supers copie d'écran j'ai tout fait comme il faut. je m'apprétais à te remercier chaleureusement. je le fais évidement mais par contre le résultat me donne tjrs invalide pour un nombre de 17 à 20 caractères comme ceux que j'ai essayé ? je ne vois pas pourquoi.

as tu une idée

Link to comment
Share on other sites

  • 0

on est nul nous les suisses car moi il me mets des erreurs de paranthèse dans la fonction et dans la rubrique calcul (ce qui suit else dans la formule c'est juste ?) et en en rajoutant une en esssayant je ne vois pas dans la rubrique où et ce qu'il faut remplacer par la valeur clé. Comment as tu fait toi ?

merci d'avance

Link to comment
Share on other sites

  • 0

Bon encore le suisse nulos, oublie mes conneries après avoir fermé les yeux 10 min je me suis apercu de mes erreurs et je pense avoir trouvé et çà marche. en fait c'est une selue fonction que l'on utilise facilement en calcul modulo10(valeur clé).

merci encore bcp.

Antoine

Link to comment
Share on other sites

  • 0

merci beaucoup à vous tous cela fonctionne pil poil et je vais pouvoir envoyer de belles facture avec des BVR suisses à mes clients... enfin après résolu les pb de police et de placement des lignes. rien à côté de ses formules.

merci encore.

tcho

Antoine

Link to comment
Share on other sites

  • 0

Bonjour à vous tous,

voilà j'ai édité et reçu mes premiers paiements grace à votre aide sur le calcul du modulo. le reste ne fût pas simple mais je m'en suis sorti. aussi je vous remercie et vous pose en PJ un exemple de mes BVR suisse d'ou j'ai rayé les noms.

Merci encore

BVRPOSTE.jpg

BVRPOSTE.jpg

post-652-1215502593_thumb.jpg

post-652-1215502593_thumb.jpg

post-652-1215502593_thumb.jpg

post-652-1215502593_thumb.jpg

post-652-1215502593_thumb.jpg

post-652-1215502593_thumb.jpg

post-652-1215502593_thumb.jpg

post-652-1215502593_thumb.jpg

Link to comment
Share on other sites

  • 0

vioci aussi l'algorythme en ce qui ressemble à du vieux basic de ma jeunesse non ?

 

Le même, mais traduit en javascript : 

 

function luhnGet (luhn)

{

var k;

var zr_post = "0946827135094682713" ;

var i = 0;

for (j = 0 ; j< luhn.length; j++)

    {

    k = parseInt(luhn.charAt(j));

    i = parseInt(zr_post.charAt(i+k));

    }

return (10-i) % 10;

};

          

function luhnChk(luhn)

{

return (luhnGet (luhn.substring(0, luhn.length-1)) == parseInt(luhn.charAt(luhn.length -1))) ;

};

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...