downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | conferences | my php.net

search for in the

bcmul> <bcdiv
[edit] Last updated: Fri, 26 Apr 2013

view this page in

bcmod

(PHP 4, PHP 5)

bcmodGet modulus of an arbitrary precision number

Description

string bcmod ( string $left_operand , string $modulus )

Get the modulus of the left_operand using modulus.

Parameters

left_operand

The left operand, as a string.

modulus

The modulus, as a string.

Return Values

Returns the modulus as a string, or NULL if modulus is 0.

Examples

Example #1 bcmod() example

<?php
echo bcmod('4''2'); // 0
echo bcmod('2''4'); // 2
?>

See Also

  • bcdiv() - Divide two arbitrary precision numbers



bcmul> <bcdiv
[edit] Last updated: Fri, 26 Apr 2013
 
add a note add a note User Contributed Notes bcmod - [6 notes]
up
1
drahoszdenek at gmail dot com
3 months ago
The modulus can be only integer. For "floats" bcmod returns 0:

<?php
echo bcmod('10', '2.1'); // 0
?>

For real modulus you can use BN-PHP project (hosted at Bitbucket):

<?php
$eval
= new \BN\Expression\ExpressionEvaluator();
$operators = new \BN\Expression\OperatorsFactory();
$eval->setOperators($operators->getOperators(array('%')));
       
echo
$eval->evaluate('10 % 2.1'); // 1.6
echo $eval->evaluate('10 % -2.1'); // 1.6
echo $eval->evaluate('-10 % 2.1'); // -1.6
echo $eval->evaluate('-10 % -2.1'); // -1.6
?>
up
1
lauris at night dot lt
9 years ago
<?php
/**
 * my_bcmod - get modulus (substitute for bcmod)
 * string my_bcmod ( string left_operand, int modulus )
 * left_operand can be really big, but be carefull with modulus :(
 * by Andrius Baranauskas and Laurynas Butkus :) Vilnius, Lithuania
 **/
function my_bcmod( $x, $y )
{
   
// how many numbers to take at once? carefull not to exceed (int)
   
$take = 5;    
   
$mod = '';

    do
    {
       
$a = (int)$mod.substr( $x, 0, $take );
       
$x = substr( $x, $take );
       
$mod = $a % $y;   
    }
    while (
strlen($x) );

    return (int)
$mod;
}

// example
echo my_bcmod( "7044060001970316212900", 150 );
?>
up
2
admin at deosnet dot com
4 months ago
This function is also equivalent to :

<?php
   
echo 4%2; // 0
   
echo 2%4; // 2
?>
up
0
ArleCamille (okw1003 at gmail dot com)
3 years ago
GCD made in Euclidian algorithm:
<?php
function bcgcd($a, $b)
{
    if(
$a < $b)
    {
       
$t = $b;
       
$b = $a;
       
$a = $t;
        unset(
$t);
    }
    if(
bcmod($a, $b) == "0") return $b;
    else return
bcgcd($b, bcmod($a, $b));
}
?>
hope this helps.
up
0
mcuelenaere at gmail dot com
5 years ago
Heres an useful IBAN generate function:

<?php
function controleer_iban($iban) {
   
$iban = str_replace(array(" ", "  ", "   ", "\t"), "", $iban);
   
$iban = strtoupper(str_replace(" ", "", $iban));
    if(
strlen($iban)>34)
        return
false;
   
$acceptabel = "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 0";
   
$acceptabel = explode(" ", $acceptabel);
    for(
$i = 0; $i<strlen($iban); $i++) {
        if(
in_array(substr($iban, $i, 1), $acceptabel) === false)
            return
false;
    }
   
$alfa = "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z";
   
$alfa = explode(" ", $alfa);
    for(
$i = 1; $i<27; $i++) {
       
$alfa_replace[] = $i+9;
    }
   
$controlegetal = str_replace($alfa, $alfa_replace, substr($iban, 4, strlen($iban)-4).substr($iban, 0, 2)."00");
   
$controlegetal = 98 - (int)bcmod($controlegetal,97);
    if((int)
$controlegetal === (int)substr($iban, 2, 2))
        return
true;
    else
        return
false;   
}
?>
up
0
sebas at stageprikbord dot nl
6 years ago
function bc_is_even($int_str) {
  return (int)!($int_str & 1);
}

More resource efficient version of 'bc_is_even'.

 
show source | credits | stats | sitemap | contact | advertising | mirror sites