Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    contatore alfanumerico, idee?

    Ciao a tutti!

    ho bisogno di creare un contatore alfanumerico di 4 digit che parta da 0000 e finisca a ZZZZ

    esempio:

    0001
    0002
    ..
    ..
    9999
    A000
    A001
    A999
    ..
    ..
    Z999
    ..
    ..
    AA00
    AA01

    etc.. ZZZZ


    qualche idea su come procedere?

    un saluto!

  2. #2
    Ciao,
    ti crei una classe contatore che ha una variabile membro contatore e un metodo getNextCount() che ti restituisce il valore incrementato di uno.
    Naturalemnte avrai un metodo privato getNextDigit che si occupa di calcolare la progressione dei digit con le regole he ti servono (cioè dopo il 9 vine A e dopo Z viene 0)

    più o meno così (poi ottimizzazioni e i controlli sui limiti te li fai tu):

    Codice PHP:

    class Contatore4Digit 
    {
        var 
    $m_contatore;

        function 
    __construct($lStart '0000'
        {
            
    $this->m_contatore $lStart;
            
        }


        public function 
    getNextCount()
        {
            
    $next0 false;
            
    $next1 false;
            
    $next2 false;
            
    $next3 false;
        
        
            if (
    $this->m_contatore[3] == 'Z'
           {

                
    $next2 true;

                if (
    $this->m_contatore[2] == 'Z'
                {
                    
    $next1 true;
                    if (
    $this->m_contatore[1] == 'Z'
                    {
                        
    $next0 true;
                    if (
    $this->m_contatore[0] == 'Z'
                        
    $next3 true;
                    }
                }
           }

            
    $this->m_contatore[3] = $this->getNextDigit($this->m_contatore[3]);

            if (
    $next1
                
    $this->m_contatore[1] = $this->getNextDigit($this->m_contatore[1]);
            if (
    $next2
                
    $this->m_contatore[2] = $this->getNextDigit($this->m_contatore[2]);
            if (
    $next0
                
    $this->m_contatore[0] = $this->getNextDigit($this->m_contatore[0]);

            return 
    $this->m_contatore
        }
        
        private function 
    getNextDigit($str)
        {
        
        
    $ascii ord($str);
        if (
    $str == '9'
            
    $ascii 65;
        else if (
    $str == 'Z'
            
    $ascii 48;
        else 
            
    $ascii++;
        
        return 
    chr($ascii);
        
        
        }

        

    quando la vuoi usare fai semplicemente:

    Codice PHP:
    $cont = new Contatore4Digit('ZZWW'); //imposti il valore di partenza, se lasci vuoto si imposta a '0000';

        
    for ($i=0$i<200;$i++) 
        {
            echo 
    '
    '
    ;
            echo 
    $cont->getNextCount(); //prendi il valore successivo
            
        


    EDIT:
    ovviamente base_convert suggerita da Raven è più performante e più semplice

  3. #3
    Codice PHP:

    for ($i=0;  $i 1679616$i++)
        echo 
    base_convert($i1036); 
    comunque a rigor di logica le tuo esempio dopo 9999 viene 999A

    A000 viene dopo 9ZZZ

  4. #4
    Utente di HTML.it L'avatar di bode
    Registrato dal
    Feb 2007
    Messaggi
    304

    Re: contatore alfanumerico, idee?

    Originariamente inviato da chaosgate82
    Ciao a tutti!

    ho bisogno di creare un contatore alfanumerico di 4 digit che parta da 0000 e finisca a ZZZZ

    esempio:

    0001
    0002
    ..
    ..
    9999
    A000
    A001
    A999
    ..
    ..
    Z999
    ..
    ..
    AA00
    AA01

    etc.. ZZZZ


    qualche idea su come procedere?

    un saluto!
    Ma non dovrebbe essere così? Altrimenti sembra che vuoi le prima 10mila combinazioni numeriche e poi alfanumeriche, e la A deve iniziare dalle unità non dalle migliaia.
    0001
    0002
    ..
    000A
    ...
    000Z
    0010
    ...
    ZZZZ

  5. #5
    ecco una versione più completa

    Codice PHP:
    $max 1000// la stringa ZZZZ equivale all'intero 1679615. Sono più di 1 milione di numeri! sicuro di volerli contare tutti?
    for ($i=0$i <= $max$i++)
    {
       
    $counter =  base_convert($i1036); // converto la base
       
    $counter sprintf("%04s"$counter); // aggiungo gli zeri davanti
       
    $counter strtoupper($counter); // converto in maiuscolo
       
    echo $counter;
       echo 
    "
    "
    ;

    edit: avevo sbagliato a contare le combinazioni. Ora ho corretto, scusate

  6. #6

    Re: Re: contatore alfanumerico, idee?

    Originariamente inviato da bode
    Ma non dovrebbe essere così? Altrimenti sembra che vuoi le prima 10mila combinazioni numeriche e poi alfanumeriche, e la A deve iniziare dalle unità non dalle migliaia.
    0001
    0002
    ..
    000A
    ...
    000Z
    0010
    ...
    ZZZZ
    Si hai ragione! mi va benissimo che dopo 0009 ci sia 000A,

    Vi ringrazio moltissimo, sia philbert per la versione estesa, che raven74 utilizzando la base_convert (mi mancava )

    le due versioni producono lo stesso output, avete centrato perfettamente il mio problema, grazie mille e buon lavoro!

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.