Pages

Subscribe:

Ads 468x60px

Labels

28/02/2014

Criando um formulário validador de CPF com Ajax Jquery.

Algoritmo do CPF - O que está por trás do gerador de CPF 

Para exemplificar o processo vamos gerar um CPF válido, calculando os dígitos verificadores de um número hipotético, 111.444.777-XX.

Calculando o Primeiro Dígito Verificador:

   O primeiro dígito verificador do CPF é calculado utilizando-se o seguinte algoritmo. 1) Distribua os 9 primeiros dígitos em um quadro colocando os pesos 10, 9, 8, 7, 6, 5, 4, 3, 2 abaixo da esquerda para a direita, conforme representação abaixo:

111444777
1098765432

 2) Multiplique os valores de cada coluna:

111444777
1098765432
1098282420282114

3) Calcule o somatório dos resultados (10+9+...+21+14) = 162

4) O resultado obtido (162) será divido por 11. Considere como quociente apenas o valor inteiro, o resto da divisão será responsável pelo cálculo do primeiro dígito verificador.
Vamos acompanhar: 162 dividido por 11 obtemos 14 como quociente e 8 como resto da divisão. Caso o resto da divisão seja menor que 2, o nosso primeiro dígito verificador se torna 0 (zero), caso contrário subtrai-se o valor obtido de 11, que é nosso caso. Sendo assim nosso dígito verificador é 11-8, ou seja, 3 (três). Já temos portanto parte do CPF, confira: 111.444.777-3X.


Veja agora como implementar isso em PHP + jQuery:

Arquivo => index.html:
-------------------------------------------------------------------------------------------------------------------
<html>
<head>
  <script src="js/jquery-1.2.6.pack.js" type="text/javascript"></script>
  <script src="js/jquery.maskedinput-1.1.4.pack.js" type="text/javascript"></script>
  <script type="text/javascript">
   $(document).ready(function(){
    $("#cpf").mask("999.999.999-99");
   });
   
   //minha funcao validadora
   function  enviaValor(){
    var valor = $('#cpf').val();
    //console.log($('#cpf').val());
    $(document).ready(function(){
      //efetuando a gravação e contabilização de pratos mais acessados
      $.post(
       "./validar.php",
       { codigo: valor  },
       function(data) {
        //console.log(data);
        if(data == 1) {  
         $("#saida").html("<span style='color: green'>CPF Válido!</span>");   
        } else {  
         $("#saida").html("<span style='color: red'>CPF Inválido!</span>");   
        }
       }
        );
    });
   }
  </script>
</head>
 <title>
 Validar CPF
 </title>
</html></pre>
<body>
  <form action="" id="form1" method="post" name="form1">
   <div align="center">
    <table border="0" cellpadding="0" cellspacing="0" style="width: 100%px;">
     <tbody>
<tr>
       <td height="40">
        <div align="center">
         <input class="saida" id="cpf" name="cpf" type="text" />
        </div>
</td>
      </tr>
<tr>
       <td>
        <div align="center">
         <input id="botaoValidarCPF" name="botaoValidarCPF" onclick="enviaValor();" style="cursor: pointer; font-size: 15px;" type="button" value="Validar CPF" />
        </div>
<div align="center" class="style7" id="saida">
         <span style="color: green;"></span>
        </div>
</td>
      </tr>
</tbody>
    </table>
</div>
</form>
</body>
------------------------------------------------------------------------------ 
 Observe que linha onde é importado o arquivo .js, é uma biblioteca (jquery.maskedinput) de mascaras javascript e é aplicada na linha 7;

Em seguida é criado uma função javascript de nome "enviaValor()" que possui uma requisição Ajax jQuery $.post que envia o valor do campo de formulario para o arquivo PHP "validar.php" receber e procesar da seguinte forma:

---------------------------------------------------------------------------------------------------------------------

 <?php
 //recebe o dado vindo da pagina via Ajax jQuery
$cpf = (isset($_REQUEST['codigo'])) ? $_REQUEST['codigo'] : "" ;


//funcao que retira o ponto e traço e valida o CPF com o calculo do algoritmo
function validaCPF($cpf = null) {

    // Verifica se um número foi informado
    if(empty($cpf)) {
        return false;
    }

    // Elimina possivel mascara
    $cpf = ereg_replace('[^0-9]', '', $cpf);
    $cpf = str_pad($cpf, 11, '0', STR_PAD_LEFT);
   
    // Verifica se o numero de digitos informados é igual a 11
    if (strlen($cpf) != 11) {
        return false;
    }
    // Verifica se nenhuma das sequências invalidas abaixo
    // foi digitada. Caso afirmativo, retorna falso
    else if ($cpf == '00000000000' ||
        $cpf == '11111111111' ||
        $cpf == '22222222222' ||
        $cpf == '33333333333' ||
        $cpf == '44444444444' ||
        $cpf == '55555555555' ||
        $cpf == '66666666666' ||
        $cpf == '77777777777' ||
        $cpf == '88888888888' ||
        $cpf == '99999999999') {
        return false;
     // Calcula os digitos verificadores para verificar se o
     // CPF é válido
     } else { 
       
        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;
    }
}

//verifica se não enviado o formulario em branco
if($cpf !== ""){
        //verifica se a funçao retornou "true" ou "false"
        if(validaCPF($cpf)){
            echo 1;
        } else {
            echo 0;
        }
} else {
    echo "Digite um CPF!";
}

?>
---------------------------------------------------------------------------------------------------------------------

Um exemplo funcionando pode ser visto abaixo:

Um abraço e até a próxima a todos(as)!

20/02/2014

Como criar uma loja on-line: 10 perguntas que você deve fazer antes de contratar um desenvolvedor de comércio eletrônico

19/02/2014

Site para uso de várias fotos e imagens tematicas variadas

Neste post do site abaixo segue uma relação de sites que disponibilizaram muitas fotos para se usar em diferentes projetos:

Um abraço e até logo!

11/02/2014

Personalizar Mensagens “setFlash” no CakePHP

Olá,  estive com uma dificuldade de entender como modificava as mensagens de erro e sucesso padrão do CakePHP e achei um interessante tutorial:







Como achei muito útil para mim gostaria de compartilhar este tutorial:

1º Passo:
 
Criar arquivo: /app/views/elements/flash-sucesso.ctp
<div class="flash-sucesso">
“O cadastro foi concluído com sucesso!”
</div>


2º Passo:
 
Criar arquivo: /app/views/elements/flash-erro.ctp
<div class="flash-erro">
“Não foi possível salvar. Tente novamente.”
</div>


ALTERANDO O CONTROLLER

Devemos agora alterar o controller para chamar os arquivos que criamos na pasta “views/elements/”.
//CONTROLLER
$this->Session->setFlash(‘’, ‘flash-sucesso’);
//ou
$this->Session->setFlash(‘’, ‘flash-erro’);


CRIANDO O CSS
 
Criar arquivo: /app/webroot/css/css-styles.css
.flash-sucesso {
background: #e5f2be;
border:2px solid #bedf5d;
padding:10px;
font-weight:bold;
}
.flash-erro {
background: #eccecf;
border:2px solid #9e0b0f;
padding:10px;
font-weight:bold;
}


Não, eu não criei o código css acima, apenas dei um CTRL C + CTRL V para facilitar a minha vida e a de vocês. Sejamos práticos galera! Rsrs.
Pronto! Basicamente é isto. Simples, não é?
É claro que vocês podem ainda criar “n” situações com o setFlash. Vocês podem implementar funcionalidades com o jQuery, tais como: criar um botão “fechar” dentro da mensagem, fazer com que a mensagem suma depois de alguns segundos, etc. Isso vai depender do conhecimento, da criatividade e da preguiça de cada um. =D
Espero que tenham gostado.
Abraços e até a próxima!


http://mytechnews.com.br/blog/?p=64

10/02/2014

TRABALHANDO COM O CAKEPHP E O USO DE JOIN


Entre os framaworks de desenvolvimento ágil e rápido de aplicações em linguagem PHP, temos o CakePHP.  Criado e mantido pelo desenvolvedor  Garrett Woodworth (aproximadamente em 2009).  Possui uma excelente estrutura contendo todos os padrões de separação de camadas do MVC e boas práticas de programação.  Sua documentação e colaboração em sua comunidade tem animado mais e mais a multiplicar seus novos adeptos a este framework.

Vou tratar de deixar registrado um recurso para quem já iniciou seus projetos com o CakePHP ou pretende iniciar, que trata sobre o uso de JOINS numa consulta que retorna uma paginação de resultados vindo de 2 ou mais tabelas de um banco relacional MySQL.
Observe que neste exemplo temos na linha 43 a parametrização do recursive como -1, para que o JOIN desta consulta ocorra desprezando os relacionamentos existentes no Model da aplicação para este contexto de visão no Controller.  

A linha 44 além de trazer o relacionamento dos campos da tabela de Log e Users(usuários) ele armazena em uma sub-consulta a data de último acesso ao sistema através da leitura do registro de ultimo acesso:
$this->paginate['User']['fields'] = array('Log.*,(SELECT MAX(created) FROM logs WHERE users = User.id ORDER BY created DESC LIMIT 1) as ultimo','User.*');

Nas linhas 46 a 53 temos a consulta JOIN de relacionamento da tabela users com a tabela logs através de suas respectivas chaves primária e estrangeiras.

Na linha 54 temos uma conditions (condição) para caso o filtro de busca seja usado será filtrado e adequadamente listado.

Linha 55 temos o agrupamento da tabela ou GROUP BY, seguido pelo ORDER (ordenação linha 56) e limite de páginas a serem exibidas na listagem (linha 57).

A estrutura da classe do modelo de Log ficou simples e objetiva para este caso:
-------------------------------------------------------------------------------------------------------
class Log extends AppModel {
    
    public $name = 'Log';

public $belongsTo = array(
        'User' => array(
            'className'=> 'User', 
            'foreignKey' => 'users'
)
      );
}
-------------------------------------------------------------------------------------------------------

Já a classe de modelo (Model) de usuário foi mantido acrescentado ao atributo $belongsTo o relacionamento do Model Logs:
-------------------------------------------------------------------------------------------------------
public $belongsTo = array(
'Group' => array(
'className' => 'Group',
'foreignKey' => 'group_id',
'conditions' => '',
'fields' => '',
'order' => ''
),
'Log' => array(
'className' => 'Log',
'foreignKey' => 'id'
)
);
------------------------------------------------------------------------------------------------------- 

Disso resultará uma consulta para listar todos os usuários ativos e suas respectivas data e hora de último acesso:


Podemos ver na coluna Ultimo - Acesso a data e hora de último acesso de cada usuário ao sistema.

Achei bom compartilhar esta experiência e agradeço a colaboração e ajuda de meu amigo Victor Souto que me orientou a melhor prática para chegar a esse resultado.

Um abraço a todos (as).
Bibliografia:
http://pt.wikipedia.org/wiki/CakePHP
http://www.mainelydesign.com/blog/view/forcing-a-single-join-in-cakephp-pagination
http://book.cakephp.org/2.0/en/core-libraries/components/pagination.html



09/09/2013

Formatar datas com PHP

Uma maneira objetiva e boa para se formatar as datas no PHP é usando o objeto DateTime :

$date = new DateTime('2011-06-21');
echo $date->format('dmY');

Outra forma seria esta:

date("d/m/Y",strtotime($data_formato_mysql));

      => Retorna: 10/02/2014

Ou essa:

date("d/m/Y H:i:s",strtotime($data_formato_mysql))

     => Retorna: 10/02/2014 11:25:02

Para usarmos ele basta instanciarmos a classe com o valor sendo passado como parâmetro e pronto!

28/08/2013

Remover caracter especiais

Olá a todos (as),

Existem muitos versões de funções para remoção de caracteres especiais no PHP, mas eu optei em compartilhar esta aqui que funciona muito bem em minhas aplicações e usa expressão regular:

<?php
/*
  * Remover caracteres especiais - Roberto S. Melo - roberto_sm822@yahoo.com.br
*/
class AlgumaCoisaAi{
  public __construct(){
  
  }
  
  //METODO DE REMOÇÃO DE CARACTERES ESPECIAIS
  public function removerCaracter($valor){
      $valor = preg_replace("/&([a-z])[a-z]+;/i", "$1", htmlentities($valor));
      return $valor;
  }
  //.........  logica ........ 
}
?>

Espero que sirva de ajuda.

09/07/2013

Tornar qualquer usuario Moodle em Root

Boa tarde a todos (as), Hoje vou falar de configuração do LMS Moodle para quem conhece. Estive com uma certa dificuldade de descobrir como setar um usuário qualquer para que ele se tornasse administrador também. O procedimento não poderia ser o mais fácil como pode ser visto na imagem ilustrativa abaixo:

  

 Observe que o caminho para se chegar a esta tela é "Administração do Site => Usuários => Permissões => Administradores do site".  Para este exemplo usei a versão Moodle 2.3.8.

06/02/2013

Por que devo aprender Linux?

Por que devo aprender Linux?
Publicada em 04/02/2013 às 14:29

Principais tendências do mercado de TI tem Linux como pré-requisito

Empresas de consultoria, que trabalham na previsão de como será o futuro de TI, são unânimes em afirmar que a inter-relação das forças entre Cloud Computing, Mobilidade, Redes Sociais eInformações direcionam os novos cenários de negócios, juntas, elas estão revolucionando empresas e a sociedade.
Milhares de tecnologias, softwares e produtos são utilizados para suportar a "Era da Informação", o que nos leva a perguntar: Por que eu devo aprender Linux? A resposta é bastante simples: o Linux está na base, 'no coração', da computação em nuvem e dos dispositivos móveis que tem o Android como sistema operacional.
Em 2012, os tablets e celulares Android venderam mais do que PCs e já são 400.000.000 de dispositivos em todo o mundo. Em 2015, para cada 4 desenvolvimentos, em mobile, apenas 1 será para PC. O Android é baseado no Linux
Mas, se existe uma enorme probabilidade de termos em nossas mãos um dispositivo móvel que use Linux, a probabilidade de nos conectarmos em um aplicativo hospedado em Cloud, que tenha o Linux como sistema operacional, é ainda maior.
Na Amazon (AWS), um dos maiores provedores mundiais de serviços em Cloud, aproximadamente meio milhão de servidores físicos rodam Linux, suportando milhões de máquinas virtuais que também rodam em Linux. Outros provedores de Cloud devem apresentar situações parecidas.
Ninguém pode prever o futuro mas, trabalhando com probabilidades, aprender Linux é a opção certa para uma carreira de sucesso em TI -  tanto agora quanto no futuro.

Linux/Android em números:


S.O dos 500 maiores supercomputadoresLinuxOutrosSistem...jun 1998jun 1999jun 2000jun 2001jun 2002jun 2003jun 2004jun 2005jun 2006jun 2007jun 2008jun 2009jun 2010jun 2011jun 20120150300450600
2012 - Vendas de smartphones no BrasiliOSAndroidRIMSymbianWindowsBadaOutros31.5%56.8%Android56,7 (56.8%)



Fontes:
Artigo plublicado originalmente em: 4linux 4linux

23/01/2013

PHP mostrando planilha Excel XLS

Olá a todos(as),

Estive pesquisando um recurso para exibir uma planilha do Excel na página HTML com o seu conteúdo.

Achei a seguinte solução no Google Code: http://code.google.com/p/php-excel-reader/

A última revisão desta classe foi em 14-04-2009, então apresentou-se erros na codificação devido a funções antigas PHP que não são mais usadas nas versões atuais do núcleo PHP.  Por exemplo temos a função split('', $valor) que poderemos substituir pela explode("", $valor),  temos também na linha que faz a chamada a classe "OLERead" que controla a exibição das posições das células da planilha.

Exite uma versão desta classe "OLERead" atualizada para quem quiser contribuir em melhorar o código n o seguinte link: http://code.google.com/p/php-spreadsheetreader/source/browse/Excel/OLERead.php?r=26

Para quem precisa usar este recurso disponibilizo a versão melhorada do código que funcionará nas versões do PHP acima do 5.3:
http://code.google.com/p/php-excel-reader-melhorado/downloads/list


O proximo passo agora é criar um módulo ou plugin do Joomla 2.5 para ler os arquivos relacionados a artigos!

Um abraço a todos e vamos ver quem pode colaborar também... :)