Calcula o segundo dígito verificador da chave asbace

@author Victor Felix <victor.dreed@gmail.com>
@param $chaveAsbace
@param $primeiroDv
@return int
163357
public static function segundoDvAsbace($chaveAsbace, $primeiroDv)
    {
        $resto = self::restoSegundoDvAsbace($chaveAsbace, $primeiroDv);

        if (0 == $resto) {
            return 0;
        } elseif (1 == $resto) {
            return 9 > $primeiroDv
                ? self::segundoDvAsbace($chaveAsbace, $primeiroDv + 1)
                : self::segundoDvAsbace($chaveAsbace, 0);
        }

        return 11 - $resto;
    }
426810
private function calcularDvNossoNumero($nossoNumero)
    {
        $referencia = '3197';
        $indice = 0;
        $soma = 0;

        for ($i = 0; $i < strlen($nossoNumero); $i++) {
            $soma += $nossoNumero[$i] * $referencia[$indice];
            $indice++;
            $indice = $indice > 3 ? 0 : $indice;
        }

        $resto = $soma % 11;

        return $resto > 1 ? 11 - $resto : 0;
    }
1095720
public function romanNumeralsToNumber(string $roman): int
    {
        $num = 0;
        foreach (self::ROMAN_NUMERALS as $key => $value) {
            while (strpos($roman, $value) === 0) {
                $num += $key;
                $roman = substr($roman, strlen($value));
            }
        }

        return $num;
    }
360067
private static function inserir_tempo(int $tempo_da_sessao): int
    {
        $diferenca_tempo = time() - $tempo_da_sessao;
        $segundos = $diferenca_tempo;
        $minutos = round($diferenca_tempo / 60);
        $horas = round($diferenca_tempo / 3600);
        $dia = round($diferenca_tempo / 86400);
        $semana = round($diferenca_tempo / 604800);
        $mes = round($diferenca_tempo / 2592000);
        $ano = round($diferenca_tempo / 31536000);
        //segundos

        if ($segundos <= 60) {
            echo " $segundos segundos agora<br/>";
        }
        //minutos
        elseif ($minutos <= 60) {
            if ($minutos == 1) {
                echo "one minuto  e $segundos agora <br/>";
            } else {
                echo "$minutos minutos agora<br/>";
            }
        }

        //horas
        elseif ($horas <= 24) {
            if ($horas == 1) {
                echo "uma hora agora e $minutos minutos e $segundos segundos<br/>";
            } else {
                echo "$horas horas agora<br/>";
            }
        }

        // dias
        elseif ($dia <= 7) {
            if ($dia == 1) {
                echo 'um dia agora <br/>';
            } else {
                echo "$dia dias agora<br/>";
            }
        }

        //semanas
        elseif ($semana <= 4) {
            if ($semana == 1) {
                echo 'uma semana agora<br/>';
            } else {
                echo "$semana semanas agora<br/>";
            }
        }

        //mes
        elseif ($mes <= 12) {
            if ($mes == 1) {
                echo 'um mes agora<br/>';
            } else {
                echo "$mes meses agora<br/>";
            }
        }

        //semanas
        else {
            if ($ano == 1) {
                echo 'um ano agora<br/>';
            } else {
                echo "$ano anos agora<br/>";
            }
        }

        return $tempo_da_sessao;
    }
805997
public static function IPTE2CodigoBarras($ipte)
    {
        $ipte = self::onlyNumbers($ipte);

        $barras = substr($ipte, 0, 4);
        $barras .= substr($ipte, 32, 1) ;
        $barras .= substr($ipte, 33, 14) ;
        $barras .= substr($ipte, 4,1) ;
        $barras .= substr($ipte, 5, 4) ;
        $barras .= substr($ipte, 10, 10) ;
        $barras .= substr($ipte, 21, 8) ;
        $barras .= substr($ipte, 29, 2);

        return $barras;
    }
272503
public function convertIpToNumber($ipGiven)
    {
        if (filter_var($ipGiven, FILTER_VALIDATE_IP)) {
            if (filter_var($ipGiven, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
                $ips = explode('.', $ipGiven);
                return $ips[3] + $ips[2] * 256 + $ips[1] * 65536 + $ips[0] * 16777216;
            } elseif (filter_var($ipGiven, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
                return $this->convertIpV6ToNumber($ipGiven);
            }
        }
        return 'invalid IP';
    }
1062374
public function primeFormForte() {
		if ($this->bits == 0) {
			return 0;
		}

		$rotations = $this->getIntervalsOfAllInversionsAndRotations();

		// now sort all the PCSs for leftmost density
		usort($rotations, function($a, $b){
			// biggest interval at the end,
			if ($a[count($a)-1] !== $b[count($b)-1]) {
				return $a[count($a)-1] < $b[count($b)-1];
			}
			// smaller interval at the beginning
			for ($i=0; $i<count($a); $i++) {
				if ($a[$i] !== $b[$i]) {
					return $a[$i] > $b[$i];
				}
			}
			return 0;
		});
		$primeRotation = $rotations[0];

		// turn the intervals back into tones
		$p = 0;
		$tones = array(0);
		for ($i=0; $i<count($primeRotation)-1; $i++) {
			$p += $primeRotation[$i]; // add the interval...
			$tones[] = $p;
		}

		return \ianring\BitmaskUtils::tones2Bits($tones);
	}
279339
public function validarRucSociedadPrivada($numero = '')
    {
        // fuerzo parametro de entrada a string
        $numero = (string) $numero;

        // borro por si acaso errores de llamadas anteriores.
        $this->setError('');

        // validaciones
        try {
            $this->validarInicial($numero, '13');
            $this->validarCodigoProvincia(substr($numero, 0, 2));
            $this->validarTercerDigito($numero[2], 'ruc_privada');
            $this->validarCodigoEstablecimiento(substr($numero, 10, 3));
            $this->algoritmoModulo11(substr($numero, 0, 9), $numero[9], 'ruc_privada');
        } catch (Exception $e) {
            $this->setError($e->getMessage());

            return false;
        }

        return true;
    }
306511
public function validate($name, $data, $format = null)
    {
        if (!is_numeric($data) || !is_int(intval($data))) {
            throw new Exception("propriedade [ {$name} ] é inválida para tipo [ int ] definido no schema", 400);
        }

        if ($format) {
            $data = self::applyFormat($format, $data);
        }

        return intval($data);
    }
1126824
public static function modulo11($numero, $peso = 2, $base = 9, $zero = 1, $um = 1)
    {
        // Pegar somente números
        $numero = preg_replace('/[^0-9]/', '', $numero);

        $soma = 0;
        $contador = (strlen($numero) - 1);
        for ($i = $contador; $i >= 0; $i--) {
            $soma += (intval($numero[$i]) * $peso);
            $peso = (($peso < $base) ? ($peso + 1) : 2);
        }

        $resto = ($soma % 11);

        // Calcular digito
        $digito = (11 - $resto);
        $digito = (($digito > $base) ? 0 : $digito);

        /* Utilizar o dígito 1(um) sempre que o resultado do cálculo padrão for igual a 0(zero), 1(um) ou 10(dez). */
        if ($digito == 0) {
            return $zero;
        }
        if ($digito == 1) {
            return $um;
        }

        return $digito;
    }
988018
function num(elem, prop) {
	return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || 0;
}
936251
public function negative($prime = true) {
		$negative = 4095 ^ $this->scale;
		$scale = new \ianring\Scale($negative);
		if ($prime) {
			return $scale->primeForm();
		}
		return $scale->scale;
	}
687508
public function asMultiplied($value, $divisor, $decimals = null)
    {
        if ($value === null) {
            return $this->nullDisplay;
        }
        return $this->asDecimal($this->normalizeNumericValue($value) / (double)$divisor, $decimals);
    }
133656
public function primeForm() {
		$pcs = new \ianring\PitchClassSet($this->scale);
		$p = $pcs->primeFormRing();
		return $p;
	}
748987
public function primeCaches()
    {
        if ( $this->printVersion() )
        {
            return 0;
        }

        if ( !$this->parseConnectionInformation() )
        {
            return 1;
        }

        // Open connection
        $db = new phpillowCustomConnection(
            $this->connectionInfo['host'],
            $this->connectionInfo['port'],
            $this->connectionInfo['user'],
            $this->connectionInfo['pass']
        );
        $designDocs = $db->get( $this->connectionInfo['path'] . '/_all_docs?startkey=%22_design%2F%22&endkey=%22_design0%22' );
        foreach ( $designDocs->rows as $doc )
        {
            $views = $db->get( $this->connectionInfo['path'] . '/' . $doc['id'] );
            foreach ( $views->views as $view => $functions )
            {
                $this->out( "Priming view " . $doc['id'] . "/" . $view . "\n" );
                $db->get( $this->connectionInfo['path'] . '/' . $doc['id'] . '/_view/' . $view );
            }
        }
    }
164329
public function ___get($prop) {
        // retorna o valor da propriedade
        if (isset($this->meta[$prop])) {
            $metaData = (isset($this->meta[$prop])) ? $this->meta[$prop] : null;
            $this->data[$prop] = !isset($this->data[$prop]) || $this->data[$prop] == '' ? $metaData['default'] : $this->data[$prop];
            if ($metaData['required'] == true && ($this->data[$prop] == '' || !isset($this->data[$prop]))) {
                throw new Exception('Campo faltante ou com valor nulo:' . $prop . " Boleto Numero:" . $this->data['nosso_numero']);
            }
            switch ($metaData['tipo']) {
                case 'decimal':
                    $retorno = ($this->data[$prop]) ? number_format($this->data[$prop], $metaData['precision'], '', '') : '';
                    return str_pad($retorno, $metaData['tamanho'] + $metaData['precision'], '0', STR_PAD_LEFT);
                case 'int':
                    $retorno = (isset($this->data[$prop])) ? number_format($this->data[$prop], 0, '', '') : '';
                    return str_pad($retorno, $metaData['tamanho'], '0', STR_PAD_LEFT);
                case 'alfa':
                    $retorno = (isset($this->data[$prop])) ? $this->prepareText($this->data[$prop]) : '';
                    return $this->mb_str_pad(mb_substr($retorno, 0, $metaData['tamanho'], "UTF-8"), $metaData['tamanho'], ' ', STR_PAD_RIGHT);
                case 'alfa2':
                    $retorno = (isset($this->data[$prop])) ? $this->data[$prop] : '';
                    return $this->mb_str_pad(mb_substr($retorno, 0, $metaData['tamanho'], "UTF-8"), $metaData['tamanho'], ' ', STR_PAD_RIGHT);
                case $metaData['tipo'] == 'date' && $metaData['tamanho'] == 6:
                    $retorno = ($this->data[$prop]) ? date("dmy", strtotime($this->data[$prop])) : '';
                    return str_pad($retorno, $metaData['tamanho'], '0', STR_PAD_LEFT);
                case $metaData['tipo'] == 'date' && $metaData['tamanho'] == 8:
                    $retorno = ($this->data[$prop]) ? date("dmY", strtotime($this->data[$prop])) : '';
                    return str_pad($retorno, $metaData['tamanho'], '0', STR_PAD_LEFT);
                case $metaData['tipo'] == 'dateReverse':
                    $retorno = ($this->data[$prop]) ? date("Ymd", strtotime($this->data[$prop])) : '';
                    return str_pad($retorno, $metaData['tamanho'], '0', STR_PAD_LEFT);
                default:
                    return null;
            }
        }
    }
1233646
private function integerDivision(DecimalNumber $a, DecimalNumber $b, $precision)
    {
        $dividend = $a->getCoefficient();
        $divisor = new DecimalNumber($b->getCoefficient());
        $dividendLength = strlen($dividend);
        $result = '';
        $exponent = 0;

        $currentSequence = '';
        for ($i = 0; $i < $dividendLength; $i++) {
            // append digits until we get a number big enough to divide
            $currentSequence .= $dividend[$i];

            if ($currentSequence < $divisor) {
                if (!empty($result)) {
                    $result .= '0';
                }
            } else {
                // subtract divisor as many times as we can
                $remainder = new DecimalNumber($currentSequence);
                $multiple = 0;
                do {
                    $multiple++;
                    $remainder = $remainder->minus($divisor);
                } while ($remainder->isGreaterOrEqualThan($divisor));

                $result .= (string) $multiple;

                // reset sequence to the reminder
                $currentSequence = (string) $remainder;
            }

            // add up to $precision decimals
            if ($currentSequence > 0 && $i === $dividendLength - 1 && $precision > 0) {
                // "borrow" up to $precision digits
                --$precision;
                $dividend .= '0';
                $dividendLength++;
                $exponent++;
            }
        }

        $sign = ($a->isNegative() xor $b->isNegative()) ? '-' : '';

        return new DecimalNumber($sign . $result, $exponent);
    }