Search code examples
phpbarcode

php split integer into smaller parts


i'm working on a project that will need to have everything shown with barcodes, so I've generated 7 numbers for EAN8 algorithm and now have to get these 7 numbers seperately, right now i'm using for the generation

$codeint = mt_rand(1000000, 9999999);

and I need to get this 7 numbers each seperately so I can calculate the checksum for EAN8, how can i split this integer to 7 parts, for example

12345678 to 
arr[0]=1
arr[1]=2
arr[2]=3
arr[3]=4
arr[4]=5
arr[5]=6
arr[6]=7

any help would be appreciated..

also I think that I'm becoming crazy :D because I already tried most of the solutions you gave me here before and something is not working like it should work, for example:

$codeint = mt_rand(1000000, 9999999);
echo $codeint."c</br>";
echo $codeint[1];
echo $codeint[2];
echo $codeint[3];

gives me :

9082573c
empty row
empty row
empty row


solved! $codeint = (string)(mt_rand(1000000, 9999999));

Solution

  • There are two ways to do this, one of which is reasonably unique to PHP:

    1) In PHP, you can treat an integer value as a string and then index into the individual digits:

    $digits = "$codeint";
    // access a digit using intval($digits[3])
    

    2) However, the much more elegant way is to use actual integer division and a little knowledge about mathematical identities of digits, namely in a number 123, each place value is composed of ascending powers of 10, i.e.: 1 * 10^2 + 2 * 10^1 + 3 * 10^0.

    Consequently, dividing by powers of 10 will permit you to access each digit in turn.