PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → [WINDEV] [de7.5 à 11]
[WINDEV] [de7.5 à 11]
Débuté par André BRIZON, 24 jan. 2007 17:35 - 14 réponses
Posté le 24 janvier 2007 - 17:35
Bonjour,
Nous réalisons un service d'impression de chèques ( acutellement exe en 7.5)

On nous demande de préparer cette impression en calculant une clé basée sur un entier de 33 caractères. Hors il semble que Windev ne va pas jusque là...

Aurais-je mal lu ou mal interprété l'aide ? (type numérique mais limité à 32 car...)

Comment faire ce calcul de clé ou S est un entier de 31 car

S2= 97-modulo(Val(S)*100,97)

Si quelqu'un a l'expérience d'un calcul de clé RLMC (Recomposition de ligne magnétique d'un chèque)

Merci pour tout tuyau

AB
Posté le 24 janvier 2007 - 18:15
Je ne sais pas si les entiers sont limités à 32 caractères mais dans ce cas pourquoi ne pas essayer un reel ou un monetaire (même si les décimales ne servent pas => arrondi à 0)
Posté le 24 janvier 2007 - 18:58
Merci mais 1 reel est limité tout autant qu'un monétaire à 8 octets
32 caractères dépasse toutes les capacipés de windev
Posté le 25 janvier 2007 - 08:40
Salut,

il y a le type numérique qui supporte une telle longueur.

Bon dev,

Olivier
Posté le 25 janvier 2007 - 08:47
Bonjour,

Et qui ce qui vous empêche d'utiliser même une chaine de 32 caractères puis la commande val() pour lire le numerique et le masque de saisie seulement les chiffres??

A++
Posté le 25 janvier 2007 - 08:49
D'après l'exemple ne s'agirait-il pas du calcul du chiffre clé du no iban ?
Si c'est le cas ce calcul se décompose.
J'ai le code windev qui le fait. Tu peux me contacter à l'adresse e-mail suivante

fma@freesurf.ch
Posté le 25 janvier 2007 - 08:50
Slt,


j'ai eu un prbl similaire, je pense que tu pourra adapter sans pbl mon code.

envoi ton mail stp je te l'envoi

a+
Posté le 25 janvier 2007 - 08:52
....
On nous demande de préparer cette impression en calculant une clé basée sur un entier de 33 caractères. Hors il semble que Windev ne va pas jusque là...

Chez nous, nous transformons les nombres en chaîne (complétée par des zéro au début)
genre

NumériqueVersChaîne(CléCalculée,"033d")

pour résoudre le problème...

Bon dev
Alain
Posté le 25 janvier 2007 - 10:05
Salutations,

http://www.swox.com/gmp/
ce site offre gratuitement une librairie en C d'excellente qualité pour le calcul sur les nombres extrêmement grands, je m'en suis servi par le passé pour des problèmes de crypto.

A partir de ça, vous codez vos fonctions minimales en C en faites une DLL.

Vous avez aussi une classe BigInteger dans java en standard si c'est plus votre truc. J'ai pas essayé mais c'est surement possible d'interfacer avec WD.

stephane.claret[at]cashflow[point]ch
Posté le 25 janvier 2007 - 10:51
"Ali Hindi" <Alidev7@yahoo.fr> a écrit dans le message de news:
45b7e0ae$1@news.pcsoft.fr...

Bonjour,

Et qui ce qui vous empêche d'utiliser même une chaine de 32 caractères
puis la commande val() pour lire le numerique et le masque de saisie
seulement les chiffres??



c'est exactement ce que j'ai fait dans une routine de calcul de clé RIB.
On se retrouve avec un nombre représenté par :
code banque : longueur 5
code guichet: longueur 5
No de compte: longueur 11
cle RIB : longueur 2, fixée à 00 avant calcul
la clé RIB étant le reste de la division du nombre de 23 chiffres par 97.
si on utilise une chaine, on peut la couper en "tranches", en ne conservant
à chaque fois que le reste de la division, jusqu'à épuisement de la chaine.

--
Jacques TREPP
Albygest
3, rue Jean Mermoz
81160 ST-JUERY
(enlevez 'pasdespam' pour me joindre)
Posté le 26 janvier 2007 - 12:36
Chez nous, nous transformons les nombres en chaîne (complétée par des zéro au début)
genre

NumériqueVersChaîne(CléCalculée,"033d")


Pourquoi cette demi-réponse ?

Ici André BRIZON parle d'un entier de très grande taille, avec lequel il doit calculer un modulo.

Certes, il y a un rapport, car on peut alors découper la chaîne pour obtenir des nombres plus petits, qui pourront être traités comme des entiers, mais je ne comprends pas la raison de cette réponse qui n'en est pas une.
Posté le 26 janvier 2007 - 12:36
>il y a le type numérique qui supporte une telle longueur.

Peut-être, mais la fonction modulo ne prend qu'un entier.

Et le problème persisterait puisque Val(nombre_a_31_chiffres) renvoie un réel, qui ne peut être converti en type Numérique.
Posté le 26 janvier 2007 - 12:37
D'après l'exemple ne s'agirait-il pas du calcul du chiffre clé du no iban ?
Si c'est le cas ce calcul se décompose.


André BRIZON l'a écrit, c'est le calcul de la clé RLMC, à partir de la ligne CMC7 du chèque.

Et oui, le calcul se décompose, à coup de NumériqueVersChaîne() dans un sens et Val() dans l'autre (je l'ai eu fait) sur des morceaux du nombre.


Mais bon, dans un L5G, on est en droit d'attendre mieux non ?
Posté le 26 janvier 2007 - 12:38
>Et qui ce qui vous empêche d'utiliser même une chaine de 32 caractères puis la commande val() pour lire le numerique et le masque de saisie seulement les chiffres??

Tout simplement parce que Val() renvoie 0 si le nombre qu'on lui demande de convertir n'est pas dans la plage de conversion, dixit la documentation :

"Plage de conversion

La conversion d'une chaîne en entier avec la fonction Val est réalisée si la valeur est comprise entre -9.223.372.036.854.775.808 et 9.223.372.036.854.775.807. "

Soit pour des nombre de moins de 20 caractères.
Posté le 26 janvier 2007 - 12:45
Bonjour,

Passez par "Le Guide" du menu "?", et lancez l'assistant proposé avec le mot
clé "RIB". Vous aurez tout ce qu'il faut pour faire des modulos sur des
valeurs trop grandes pour être représentées en mémoire dans un entier, réel
ou même monétaire).


Elian Lacroix
elian.lacroix@gmail.com
http://elianlacroix.blogspot.com

"Guillaume DESRAT" <guillaume.desrat@rubyfr.org> a écrit dans le message de
news: 45b9d6a4$1@news.pcsoft.fr...

il y a le type numérique qui supporte une telle longueur.

Peut-être, mais la fonction modulo ne prend qu'un entier.

Et le problème persisterait puisque Val(nombre_a_31_chiffres) renvoie un
réel, qui ne peut être converti en type Numérique.