From 0bc5985c19ccd0666a01e71444012fe69b4065c0 Mon Sep 17 00:00:00 2001 From: Daniel Date: Wed, 29 Jun 2016 03:01:52 -0300 Subject: [PATCH] First version --- .gitignore | 1 + composer.json | 24 ++ src/DUtils/CurrencyUtils.php | 55 +++ src/DUtils/DateUtils.php | 609 ++++++++++++++++++++++++++++++++ src/DUtils/EnvironmentUtils.php | 28 ++ src/DUtils/FileUtils.php | 29 ++ src/DUtils/HttpUtils.php | 43 +++ src/DUtils/StringUtils.php | 145 ++++++++ 8 files changed, 934 insertions(+) create mode 100644 .gitignore create mode 100644 composer.json create mode 100644 src/DUtils/CurrencyUtils.php create mode 100644 src/DUtils/DateUtils.php create mode 100644 src/DUtils/EnvironmentUtils.php create mode 100644 src/DUtils/FileUtils.php create mode 100644 src/DUtils/HttpUtils.php create mode 100644 src/DUtils/StringUtils.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..723ef36 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea \ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..898d31a --- /dev/null +++ b/composer.json @@ -0,0 +1,24 @@ +{ + "name": "danielcmm/dutils", + "type": "library", + "description": "Simple Utility Classes", + "keywords": ["utility","currency","date","environment"], + "homepage": "https://github.com/danielcmm/DUtils", + "license": "MIT", + "authors": [ + { + "name": "Daniel Miranda", + "email": "danielcmmti@gmail.com", + "homepage": "https://github.com/danielcmm/DUtils", + "role": "Developer" + } + ], + "require": { + "php": ">=5.6.0" + }, + "autoload": { + "psr-0": { + "DUtils": "src" + } + } +} \ No newline at end of file diff --git a/src/DUtils/CurrencyUtils.php b/src/DUtils/CurrencyUtils.php new file mode 100644 index 0000000..d98ecd4 --- /dev/null +++ b/src/DUtils/CurrencyUtils.php @@ -0,0 +1,55 @@ +=3 && ($value[strlen($value)-2] == "." || $value[strlen($value)-2] == ",")) + $value .= "0"; + + $newValue = str_replace(",","",$value); + $newValue = str_replace(".","",$newValue); + + if ($newValue == $value) //Significa que não tinha pontos ou virgulas, entao consideramos como um inteiro + $newValue .= "00"; + + return substr($newValue,0,-2) . '.' . substr($newValue,strlen($newValue)-2); + + } + + +} \ No newline at end of file diff --git a/src/DUtils/DateUtils.php b/src/DUtils/DateUtils.php new file mode 100644 index 0000000..38e00ae --- /dev/null +++ b/src/DUtils/DateUtils.php @@ -0,0 +1,609 @@ + "Segunda", + 2 => "Terça", + 3 => "Quarta", + 4 => "Quinta", + 5 => "Sexta", + 6 => "Sábado", + 7 => "Domingo"); + + return $arrDiaSemana[$intDiaSemana]; + } + + static function getDiaSemanaCompleto($intDiaSemana) { + + $arrDiaSemana = array( + 1 => "segunda-feira", + 2 => "terça-feira", + 3 => "quarta-feira", + 4 => "quinta-feira", + 5 => "sexta-feira", + 6 => "sábado", + 7 => "domingo"); + + return $arrDiaSemana[$intDiaSemana]; + } + + /** + * Retorna a descricao abreviada do dia da semana + * @param number $diaSemana + * @return string + */ + static function getDscDiaSemana($diaSemana) { + + $arrDiaSemana = array( + 1 => "SEG", + 2 => "TER", + 3 => "QUA", + 4 => "QUI", + 5 => "SEX", + 6 => "SAB", + 7 => "DOM"); + + return $arrDiaSemana[$diaSemana]; + + } + + /** + * Retorna a hora atual, no format H:i. Ex: 22:50 + */ + static function getHoraAtual() { + return Date("H:i"); + } + + static function getInicioMesAnterior() { + + return getLastMonthYear() . "-" . getLastMonth() . "-01"; + + } + + /** + * Retorna a data de início do dia anterior + */ + static function getInicioDiaAnterior() { + + $diaAtual = date("d-m-Y"); + $inicioOntem = strtotime($diaAtual . " -1 day"); + return $inicioOntem; + + } + + /** + * Retorna o mes anterior ao atual + * @return Ambigous + */ + static function getLastMonth() { + + $aux = getMesAtual(); + + if ($aux == 1) { + $aux = 12; + } else { + $aux--; + } + + return $aux; + + } + + /** + * Retorna o mes atual de 1 a 12 + * @return string + */ + static function getMesAtual() { + + return date("n"); + + } + + static function getProximoMes($mesReferencia) { + + $proximo = ++$mesReferencia; + + if ($proximo == 13) { + $proximo = 1; + } + + return $proximo; + + } + + static function getProximoAnoPorMesReferencia($mesReferencia) { + + $proximoMes = getProximoMes($mesReferencia); + $ano = getCurrentYear(); + + if ($proximoMes == 1) { + ++$ano; + } + + return $ano; + + } + + + /** + * Verifica se o horário alvo está entre o horário de início e o de fim + * @param $horarioInicio + * @param $horarioFim + * @param $horarioAlvo + */ + static function isEntreHorarios($horarioInicio, $horarioFim, $horarioAlvo) { + + if (!isPreenchido($horarioInicio) || !isPreenchido($horarioFim) || !isPreenchido($horarioAlvo)) + return false; + + $inicioUnix = strtotime($horarioInicio); + $fimUnix = strtotime($horarioFim); + $alvoUnix = strtotime($horarioAlvo); + + //Se esta condição for verdadeira, significa que a hora de fim é depois de meia noite do prox dia + if ($fimUnix < $inicioUnix) { + $fimUnix = strtotime($horarioFim . "+ 1 day"); + } + + $diferencaInicio = ($alvoUnix - $inicioUnix); + $diferencaFim = ($alvoUnix - $fimUnix); + return ($diferencaInicio >= 0 && $diferencaFim <= 0); + + } + + static function isEntreDatas($data1, $data2, $dataAlvo) { + + return $dataAlvo >= $data1 && $dataAlvo <= $data2; + + } + + /** + * Verifica se um determinado mes/ano de comparação é igual ou posterior ao mês/ano de referencia + * @param int $mesReferencia + * @param int $anoReferencia + * @param int $mesComparacao + * @param int $anoComparacao + * @return boolean + */ + static function isDataIgualOuPosterior($mesReferencia, $anoReferencia, $mesComparacao, $anoComparacao) { + + if ($anoComparacao > $anoReferencia) { + return true; + } + + if ($anoComparacao == $anoReferencia) { + + if ($mesComparacao >= $mesReferencia) { + return true; + } + + } + + return false; + + } + + /** + * Verifica se um determinado mes/ano de comparação é posterior ao mês/ano de referencia + * @param int $mesReferencia + * @param int $anoReferencia + * @param int $mesComparacao + * @param int $anoComparacao + * @return boolean + */ + static function isDataPosterior($mesReferencia, $anoReferencia, $mesComparacao, $anoComparacao) { + + if ($anoComparacao > $anoReferencia) { + return true; + } + + if ($anoComparacao == $anoReferencia) { + + if ($mesComparacao > $mesReferencia) { + return true; + } + + } + + return false; + + } + + + /** + * Verifica se duas datas estao no mesmo dia + * As datas devem estar no formado Y-m-d(Americano) + * @param $data1 + * @param $data2 + * @return bool + */ + static function isMesmoDia($data1, $data2) { + + //Retira as horas... + $data1 = substr($data1, 0, 10); + $data2 = substr($data2, 0, 10); + + return $data1 == $data2; + + } + + /** + * Retorna o nome do mês + * @param int $id_mes + * @return string + */ + static function getNomeMes($id_mes) { + + switch ($id_mes) { + + case 1 : + return "Janeiro"; + break; + case 2 : + return "Fevereiro"; + break; + case 3 : + return "Março"; + break; + case 4 : + return "Abril"; + break; + case 5 : + return "Maio"; + break; + case 6 : + return "Junho"; + break; + case 7 : + return "Julho"; + break; + case 8 : + return "Agosto"; + break; + case 9 : + return "Setembro"; + break; + case 10 : + return "Outubro"; + break; + case 11 : + return "Novembro"; + break; + case 12 : + return "Dezembro"; + break; + + } + + } + + static function getNomeMesAbreviado($id_mes) { + + switch ($id_mes) { + + case 1 : + return "JAN"; + break; + case 2 : + return "FEV"; + break; + case 3 : + return "MAR"; + break; + case 4 : + return "ABR"; + break; + case 5 : + return "MAI"; + break; + case 6 : + return "JUN"; + break; + case 7 : + return "JUL"; + break; + case 8 : + return "AGO"; + break; + case 9 : + return "SET"; + break; + case 10 : + return "OUT"; + break; + case 11 : + return "NOV"; + break; + case 12 : + return "DEZ"; + break; + + } + + } + + /** + * @param $dscMes + * @param bool $completo - Retorna o número do mês com 2 digitos + * @return int + */ + + static function getIntMes($dscMes, $completo = false) { + + switch (strtoupper($dscMes)) { + + case 'JAN' : + $retorno = 1; + break; + + case 'FEV' : + $retorno = 2; + break; + + case 'MAR' : + $retorno = 3; + break; + + case 'ABR' : + $retorno = 4; + break; + + case 'MAI' : + $retorno = 5; + break; + + case 'JUN' : + $retorno = 6; + break; + + case 'JUL' : + $retorno = 7; + break; + + case 'AGO' : + $retorno = 8; + break; + + case 'SET' : + $retorno = 9; + break; + + case 'OUT' : + $retorno = 10; + break; + + case 'NOV' : + $retorno = 11; + break; + + case 'DEZ' : + $retorno = 12; + break; + } + + if (($completo) && ($retorno <= 9)) { + $retorno = "0$retorno"; + } + return $retorno; + } + + + /** + * Retorna um horário em formato de leitura + * @param $tempo + * @param $formato + */ + static function getTempoExtenso($tempo, $formato) { + + $strFinal = ""; + + switch ($formato) { + + case "S": //Segundos + + if ($tempo >= 60) { + + $qntMinutos = ($tempo / 60); + $strFinal .= getTempoExtenso($qntMinutos, "M"); + + $resto = ($tempo % 60); + + if ($resto > 0) { + $strFinal .= " e " . (int)$resto; + } + + + } else { + + $strFinal .= (int)$tempo; + + } + + $strFinal .= " segundos"; + + break; + + case "M": //Minutos + + if ($tempo >= 60) { + + $qntHoras = ($tempo / 60); + $strFinal .= getTempoExtenso($qntHoras, "H"); + + $resto = ($tempo % 60); + + if ($resto > 0) { + $strFinal .= " e " . (int)$resto; + } + + } else { + + $strFinal .= (int)$tempo; + + } + + + $strFinal .= " minuto" . ((int)$tempo > 1 ? "s" : ""); + + break; + case "H": //Minutos + + $strFinal .= (int)$tempo . " hora" . ((int)$tempo > 1 ? "s" : ""); + + break; + } + + return $strFinal; + + } + + /** + * Verifica se uma data eh valida. + * Ignora o horario, caso exista + * Formato: DD/MM/YYYY + * @param unknown_type $date + * @return boolean + */ + static function validarData($date) { + + if (strlen($date) > 10) + $date = substr($date, 0, 10); + + if (!isset($date) || $date == "") { + return false; + } + + if (stripos($date, "/") !== false) { + + list($dd, $mm, $yy) = explode("/", $date); + if ($dd != "" && $mm != "" && $yy != "") { + if (is_numeric($yy) && is_numeric($mm) && is_numeric($dd)) { + return checkdate($mm, $dd, $yy); + } + } + return false; + } else if (stripos($date, "-") !== false) { + + list($yy, $mm, $dd) = explode("-", $date); + + if (is_numeric($yy) && is_numeric($mm) && is_numeric($dd)) { + return checkdate($mm, $dd, $yy); + } + return false; + } + + return false; + } + +} \ No newline at end of file diff --git a/src/DUtils/EnvironmentUtils.php b/src/DUtils/EnvironmentUtils.php new file mode 100644 index 0000000..a81a5ca --- /dev/null +++ b/src/DUtils/EnvironmentUtils.php @@ -0,0 +1,28 @@ + 0) { + + $parte1 = substr($cpf, 0, 3); + $parte2 = substr($cpf, 3, 3); + $parte3 = substr($cpf, 6, 3); + $parte4 = substr($cpf, 9, 2); + + return "$parte1.$parte2.$parte3-$parte4"; + } + + return ""; + } + + public static function maskCompanyPinBR($cnpj) { + + if (strlen($cnpj) == 14) { + + $parte1 = substr($cnpj, 0, 2); + $parte2 = substr($cnpj, 2, 3); + $parte3 = substr($cnpj, 5, 3); + $parte4 = substr($cnpj, 8, 4); + $parte5 = substr($cnpj, 12, 2); + + return "$parte1.$parte2.$parte3/$parte4-$parte5"; + } + + return ""; + } + + /** + * Deixa a string passada somente com numeros + * @param $str + * @return string + */ + public static function alphaNumericOnly($str) { + return preg_replace('@[^0-9a-zA-Z]@', '', $str); + } + + public static function numbersOnly($str) { + return preg_replace('@[^0-9]@', '', $str); + } + + public static function validateCompanyPinBR($cnpj) { + + $cnpj = preg_replace("@[./-]@", "", $cnpj); + if (strlen($cnpj) != 14 or !is_numeric($cnpj)) { + return 0; + } + $j = 5; + $k = 6; + $soma1 = ""; + $soma2 = ""; + + for ($i = 0; $i < 13; $i++) { + $j = $j == 1 ? 9 : $j; + $k = $k == 1 ? 9 : $k; + $soma2 += ($cnpj{$i} * $k); + + if ($i < 12) { + $soma1 += ($cnpj{$i} * $j); + } + $k--; + $j--; + } + + $digito1 = $soma1 % 11 < 2 ? 0 : 11 - $soma1 % 11; + $digito2 = $soma2 % 11 < 2 ? 0 : 11 - $soma2 % 11; + return (($cnpj{12} == $digito1) and ($cnpj{13} == $digito2)); + + } + + public static function validatePersonPinBR($cpf) { + + // Verifica se o número digitado contém todos os digitos + $cpf = preg_replace('@[^0-9]@', '', $cpf); + + // Verifica se nenhuma das sequências abaixo foi digitada, caso seja, retorna falso + if (strlen($cpf) != 11 || $cpf == '00000000000' || $cpf == '11111111111' || $cpf == '22222222222' || $cpf == '33333333333' || $cpf == '44444444444' || $cpf == '55555555555' || $cpf == '66666666666' || $cpf == '77777777777' || $cpf == '88888888888' || $cpf == '99999999999') { + return false; + } else { // Calcula os números para verificar se o CPF é verdadeiro + + + for ($t = 9; $t < 11; $t++) { + for ($d = 0, $c = 0; $c < $t; $c++) { + $d += $cpf{$c} * (($t + 1) - $c); + } + + $d = ((10 * $d) % 11) % 10; + + if ($cpf{$c} != $d) { + return false; + } + } + + return true; + } + } + + public static function validatePhoneNumberBR($numTelefone){ + + $numTelefone = self::numbersOnly($numTelefone); + + if ((strlen($numTelefone) == 10 || strlen($numTelefone) == 11) && is_numeric($numTelefone)){ + return true; + } + + return false; + + } + +} \ No newline at end of file