Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    11

    Conversione codice a barre farmaci

    Ciao a tutti,

    prima di postare ho provato a cercare sia qui che sul web ma non riesco a trovare nulla...

    Avrei bisogno di leggere (con lettore di codice a barre) il codice apposto sulle scatole di medicinali para-farmaceutici ed eseguire una ricerca attraverso php/MySQL.

    Nulla di apocalittico ma.... il codice riportato sulla scatola (a base 10) risulta diverso da quello letto dal lettore (base 32).

    Ho provato con un semplice:

    Codice PHP:
    echo base_convert($codice3210); 
    ottenendo in terzo risultato ancora diverso.

    esempio:
    CODOCE SCRITTO SULLA SCATOLA (e presente nel db) -> 909467464
    CODICE LETTO DAL LETTORE -> V3BRU8
    CODICE RICAVATO DA BASE_CONVERT -> 1043722184

    Infinie ho trovato questa spiega del codice farmaceutico:
    http://www.codiceabarre.it/bccode32.htm

    Solo che non so proprio da che parte cominciare per creare uno script per la conversione e far diventare V3BRU8 --> 909467464.

    Vi sarei grato se riusciste a darmi almeno l'imbeccata per cominciare a scrive un convertitore...


    Grazie mille in anticipo
    ciao
    G

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,501
    Sicuro che non sia possibile impostare direttamente il lettore in modo che legga il codice giusto?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    11
    Ho provato sia con il mio datalogic fire scan 131d sia con quello del cliente (che già utilizza per la stessa funzione)... Nn ricordo il modello ma legge sempre lo stesso codice... e nn trovo nessuna impostazione nel manuale del lettore...

    Grazie per la risposta comunque

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,501
    Te l'ho chiesto perché ho provato a cercare e in diverse discussioni hanno suggerito la modifica all'impostazione del lettore.

    Comunque qui pare diano una soluzione in VB, vedi se ti torna utile.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    11
    uuu... vb e' una vita che nn lo tocco ma... mi ci metto subito grazie mille se giungo ad un risultato o se mi incastro... disturbo ancora

    Grazie

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Guarda, io ho fatto solo i conti da base 32 a base 10 e viene il codice atteso
    codice:
    B = 10     K = 17     S = 24
    C = 11     L = 18     T = 25
    D = 12     M = 19     U = 26
    F = 13     N = 20     V = 27
    G = 14     P = 21     W = 28
    H = 15     Q = 22     Y = 30
    J = 16     R = 23     Z = 31
    codice:
    V  3  B  R  U  8 ===>
    
    V = 27 * 32 ^ 5 +
    3 =  3 * 32 ^ 4 +
    B = 10 * 32 ^ 3 +
    R = 23 * 32 ^ 2 +
    U = 26 * 32 ^ 1 +
    8 =  8 * 32 ^ 0
    
    = 909467464
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Il "problema" è il comportamento "inatteso" delle funzioni di conversione da base a base: nell'alfabeto del tuo codice a barre non sono assegnabili A, E, I, O. Nella conversione "intrinseca" di PHP, ad A corrisponde 10 etc etc, ed infatti facendo i conti (e fatalità l'ultima lettera utile è la V, a cui corrisponde 31) viene proprio fuori il risultato che ottieni tu: 1.043.722.184
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,501
    Originariamente inviato da Andrea1979
    ...
    nell'alfabeto del tuo codice a barre non sono assegnabili A, E, I, O.
    ...
    Ah, ecco l'inghippo.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    11
    Originariamente inviato da Andrea1979
    Il "problema" è il comportamento "inatteso" delle funzioni di conversione da base a base: nell'alfabeto del tuo codice a barre non sono assegnabili A, E, I, O. Nella conversione "intrinseca" di PHP, ad A corrisponde 10 etc etc, ed infatti facendo i conti (e fatalità l'ultima lettera utile è la V, a cui corrisponde 31) viene proprio fuori il risultato che ottieni tu: 1.043.722.184

    Ok perfetto e' tutto chiarissimo Grazie!

    ma mi sa che sbaglio ancora qualcosa...

    Codice PHP:
    function farmacode($code){
         
    $wres 0;
         
    $codeprint "";
         
    $strcon "0123456789BCDFGHJKLMNPQRSTUVWXYZ";
         
    $strcon str_split($strcon,1);
         
    $codelen strlen$code ) - 1;
         for( 
    $i 0$i <= $codelen$i++ ) {
              
    $char array_search(substr$code$i), $strcon);
              
    $wres +=  ($char 32^($codelen $i));
         }
         return 
    $wres;
    }
                          
    $code 'V3BRU8';
                                        
    echo 
    farmacode($code); 
    RISULTATO => 3119

    qualche idea?

    Grazie

  10. #10
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,501
    $wres += ($char * pow(32,($codelen - $i)));

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.