Le compte (bancaire) est bon
Publié : jeu. 27/nov./2008 12:58
Bonjour à tous,
débutant en PB je me suis dis que le plus simple (!!) serait peut être d'adapter un petit programme de ceux que j'ai déjà en PHP.
Voici donc ma toute première réalisation qui sert uniquement à vérifier les comptes bancaires entrés dans les formulaires divers.
J'aimerais juste avoir qq retours pour savoir si je suis dans le vrai en matière de PB ou si je dois me convertir à la couture.
A bientôt
débutant en PB je me suis dis que le plus simple (!!) serait peut être d'adapter un petit programme de ceux que j'ai déjà en PHP.
Voici donc ma toute première réalisation qui sert uniquement à vérifier les comptes bancaires entrés dans les formulaires divers.
J'aimerais juste avoir qq retours pour savoir si je suis dans le vrai en matière de PB ou si je dois me convertir à la couture.
A bientôt
Code : Tout sélectionner
Enumeration
#WindowMain
#GAD_TEXT_code_banque
#GAD_TEXT_code_guichet
#GAD_TEXT_compte
#GAD_TEXT_rib
#GAD_TEXT_message
#GAD_STR_code_banque
#GAD_STR_code_guichet
#GAD_STR_compte
#GAD_STR_rib
#GAD_BOUT_validation
#GAD_BOUT_abandon
EndEnumeration
Declare controlerib()
OpenWindow(#WindowMain, 0, 0, 550, 160, "Contrôle des comptes bancaires", #PB_Window_ScreenCentered )
CreateGadgetList(WindowID(#WindowMain))
ButtonGadget(#GAD_BOUT_validation, 20,20, 150, 20, "controle du compte")
ButtonGadget(#GAD_BOUT_abandon, 20, 110, 150, 20, "Abandon")
TextGadget(#GAD_TEXT_code_banque, 200, 20, 120, 20, "Code banque")
TextGadget(#GAD_TEXT_code_guichet, 200, 50, 120, 20, "Code guichet")
TextGadget(#GAD_TEXT_compte, 200, 80, 120, 20, "Numéro de compte")
TextGadget(#GAD_TEXT_rib, 200, 110, 120, 20, "Clé RIB")
TextGadget(#GAD_TEXT_message, 200, 140, 330, 15, "", #PB_Text_Center)
SetGadgetColor(#GAD_TEXT_message, #PB_Gadget_BackColor, $BAFEFC )
SetGadgetColor(#GAD_TEXT_message, #PB_Gadget_FrontColor, $0000FD )
HideGadget(#GAD_TEXT_message, 1)
StringGadget(#GAD_STR_code_banque, 350, 20, 50, 20, "",#PB_String_Numeric)
StringGadget(#GAD_STR_code_guichet, 350, 50, 50, 20, "",#PB_String_Numeric)
StringGadget(#GAD_STR_compte, 350, 80, 180, 20, "", #PB_String_UpperCase)
StringGadget(#GAD_STR_rib, 350, 110, 50, 20, "",#PB_String_Numeric)
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Gadget
Select EventGadget()
Case #GAD_BOUT_validation
;déclenche le controle du compte bancaire
controlerib()
EndSelect
EndIf
Until EventGadget() = #GAD_BOUT_abandon
Procedure controlerib()
;Réinitialise l'affichage préalablement au contrôle
SetGadgetColor(#GAD_STR_code_banque, #PB_Gadget_BackColor, $FFFFFF )
SetGadgetColor(#GAD_STR_code_banque, #PB_Gadget_FrontColor, $000000 )
SetGadgetColor(#GAD_STR_code_guichet, #PB_Gadget_BackColor, $FFFFFF )
SetGadgetColor(#GAD_STR_code_guichet, #PB_Gadget_FrontColor, $000000 )
SetGadgetColor(#GAD_STR_compte, #PB_Gadget_BackColor, $FFFFFF )
SetGadgetColor(#GAD_STR_compte, #PB_Gadget_FrontColor, $000000 )
SetGadgetColor(#GAD_STR_rib, #PB_Gadget_BackColor, $FFFFFF )
SetGadgetColor(#GAD_STR_rib, #PB_Gadget_FrontColor, $000000 )
HideGadget(#GAD_TEXT_message, 1)
;Certain comptes comme ceux de la Poste comporte des lettres dans le numéro de compte
;Il est nécéssaire de remplacer ces lettres par un caractère numérique selon l'algorithme suivant
compte.s = ""
For compteur = 1 To 11 ;Les 11 caractères du compte sont lus les un après les autres
caractere.s = Mid(GetGadgetText(#GAD_STR_compte), compteur, 1) ; on extrait le caractère
ascode.b = Asc(caractere) ; et on lit son code ASCII
If ascode > 82 ;soit [S-Z] ;
compte + Str((Asc(caractere) -81)%10) ;
ElseIf ascode >73 ; soit [J-R] ;
compte + Str((Asc(caractere)-73)%10) ; si le code ASCII représente une lettre il est transformé selon son rang
ElseIf ascode >57 ; soit [A-I] ; et ajouté en fin de chaine "compte"
compte + Str((Asc(caractere)-64)%10) ;
Else
compte + caractere ; si c'est un chiffre il est conservé tel quel et ajouté à la chaine
EndIf
Next
;par exemple, le compte 00915078A24 sera remplacé par 00915078124
;code ASCII de A = 65 soit 65-64=1 1%10=1
;ou encore le compte Z0915078A24 sera remplacé par 90915078124
;code ASCII de Z = 90 soit 90-81=9 9%10=9
; ensuite le calcul de la clé est le suivant que je vous laisse découvrir. Un petit conseil, surlignez bien les parenthèses pour suivre les calculs
cle.s = Str(Val(GetGadgetText(#GAD_STR_code_banque))%97)
cle = Str((Val(cle) * 100000 + (Val(GetGadgetText(#GAD_STR_code_guichet))))%97)
cle = Str((Val(cle) * 1000000 + (Val(Left(compte , 6))))%97)
cle = Str((Val(cle) * 100000 + (Val(Right(compte , 5))))%97)
cle = Str(((97 - Val(cle)) * 100)%97)
If Len(cle) < 2 : cle = "0" + cle : EndIf
;et une simple comparaison permet de modifier l'affichage pour attirer l'attention en cas d'erreur
If cle <> GetGadgetText(#GAD_STR_rib)
SetGadgetColor(#GAD_STR_code_banque, #PB_Gadget_BackColor, $BAFEFC )
SetGadgetColor(#GAD_STR_code_banque, #PB_Gadget_FrontColor, $0000FD )
SetGadgetColor(#GAD_STR_code_guichet, #PB_Gadget_BackColor, $BAFEFC )
SetGadgetColor(#GAD_STR_code_guichet, #PB_Gadget_FrontColor, $0000FD )
SetGadgetColor(#GAD_STR_compte, #PB_Gadget_BackColor, $BAFEFC )
SetGadgetColor(#GAD_STR_compte, #PB_Gadget_FrontColor, $0000FD )
SetGadgetColor(#GAD_STR_rib, #PB_Gadget_BackColor, $BAFEFC )
SetGadgetColor(#GAD_STR_rib, #PB_Gadget_FrontColor, $0000FD )
SetGadgetText(#GAD_TEXT_message, "Pour ce compte la clé RIB devrait être: " + cle + ". A vous de voir !!!")
HideGadget(#GAD_TEXT_message, 0)
EndIf
EndProcedure