Tretas e Cenas

Tretas e Cenas


Onde escrevo as minhas tretas. Tão depressa estou a escrever sobre algo poético como a seguir escrevo só para não me esquecer.

Dezembro 2016
S T Q Q S S D
« Nov   Jan »
 1234
567891011
12131415161718
19202122232425
262728293031  

Categorias


Validar o Cartão de Cidadão em PHP

Um pequeno código em PHP para validar o Cartão do Cidadão Português.

Pedro FonsecaPedro Fonseca

Para memória futura, aqui vão os métodos que uso para validar o número do Cartão de Cidadão em PHP.

function validateCC($cardNumber){
    $cardNumber=strtoupper($cardNumber);
    $sum = 0;
    $secondDigit = false;
    if(strlen($cardNumber) != 12)
        return false;

    for ($i = strlen($cardNumber)-1; $i >= 0; --$i){
        $value = $this->getNumberFromChar($cardNumber[$i]);
        if ($secondDigit){
            $value = $value* 2;
            if ($value > 9)
                $value = $value - 9;
        }
        $sum = $sum + $value;
        $secondDigit = !$secondDigit;
    }
    return ($sum % 10) == 0;
}
function getNumberFromChar($letter)
{
    switch ($letter) {
        case '0' : return 0;
        case '1' : return 1;
        case '2' : return 2;
        case '3' : return 3;
        case '4' : return 4;
        case '5' : return 5;
        case '6' : return 6;
        case '7' : return 7;
        case '8' : return 8;
        case '9' : return 9;
        case 'A' : return 10;
        case 'B' : return 11;
        case 'C' : return 12;
        case 'D' : return 13;
        case 'E' : return 14;
        case 'F' : return 15;
        case 'G' : return 16;
        case 'H' : return 17;
        case 'I' : return 18;
        case 'J' : return 19;
        case 'K' : return 20;
        case 'L' : return 21;
        case 'M' : return 22;
        case 'N' : return 23;
        case 'O' : return 24;
        case 'P' : return 25;
        case 'Q' : return 26;
        case 'R' : return 27;
        case 'S' : return 28;
        case 'T' : return 29;
        case 'U' : return 30;
        case 'V' : return 31;
        case 'W' : return 32;
        case 'X' : return 33;
        case 'Y' : return 34;
        case 'Z' : return 35;
    }
}

 

 

 

Sou licenciado em Sistemas de informação na Universidade Lusófona, gosto de tecnologia, programação, desportos radicais, bicicletas e motas. Adoro o Sistema Android e começo a gostar de Linux. E ainda tenho a mania que sei cozinhar.

Comentários 2
  • Friend
    Posted on

    Friend Friend

    Responder Autor

    Viva,
    Podias ter feito de forma diferente. Como por exemplo:

    function validateCC($cardNumber)
    {
    $charMapping = [‘0’ => 0, ‘1’ => 1, ‘2’ => 2, ‘3’ => 3, ‘4’ => 4, ‘5’ => 5, ‘6’ => 6, ‘7’ => 7, ‘8’ => 8, ‘9’ => 9, ‘A’ => 10, ‘B’ => 11, ‘C’ => 12, ‘D’ => 13, ‘E’ => 14, ‘F’ => 15, ‘G’ => 16, ‘H’ => 17, ‘I’ => 18, ‘J’ => 19, ‘K’ => 20, ‘L’ => 21, ‘M’ => 22, ‘N’ => 23, ‘O’ => 24, ‘P’ => 25, ‘Q’ => 26, ‘R’ => 27, ‘S’ => 28, ‘T’ => 29, ‘U’ => 30, ‘V’ => 31, ‘W’ => 32, ‘X’ => 33, ‘Y’ => 34, ‘Z’ => 35];

    $cardNumber = array_reverse(str_split(strtoupper($cardNumber)));
    $sum = 0;
    $secondDigit = false;

    if(count($cardNumber) != 12)
    return false;

    foreach ($cardNumber as $char) {
    $value = $charMapping[$char];

    if ($secondDigit) {
    $value = $value * 2;
    if ($value > 9)
    $value = $value – 9;
    }

    $sum = $sum + $value;
    $secondDigit = !$secondDigit;
    }

    return ($sum % 10) == 0;
    }

    Abraço