FLUX RSS

  • YouTube
  • LinkedIn
  • Google

Archives pour : Développement

Code de validation CPF pour Javascript

O código abaixo é de uma função em Javascript otimizada para ter o menor numero de complexidade ciclomática linhas que consegui baseado na explicação presente no artigo Algoritimo de validação de CPF brasileiro – Cadastro de Pessoa Física. Ele tem uma ligeira alteração no momento do cálculo do segundo digitido verificador. Ao invés de começar pelo segundo algarismo, o codigo começa pelo primeiro e usa o valor 11 como multiplicador. Outra alteração visivel é que para evitar a necessidade de comparação para saber se estamos no nono e decimo digitos, atribuo o valor zero ao ultimo elemento (indice 10) para reduzir mais uma comparação.

O algoritmo utilizado é o método 1 explicado no artigo e há um pequeno truque para evitar a comparação com o resto igual a 10 que é fazer o módulo de 10 do resto.

   // Codigo que valida um CPF informado quanto a validade de seus dígitos verificadores.

const validarCpf = (cpf) => {
  if (cpf.length !== 11) { // Supõe-se já vir filtrado o valor
    return false;
  }
  let elementos = cpf.split(''); // convertendo a string em array
  elementos[10] = 0; // Forçando ao valor da ultima multiplicacao ser zero
  let somaA = 0;
  let somaB = 0;

  elementos.reduce(function(i, valor, indice) {
    let multiplicador = 11 - indice;
    somaB += (valor * multiplicador);
    somaA += (valor * (multiplicador > 2 ? multiplicador - 1 : 0));
  }, somaA);
  let moduloA = ((somaA * 10) % 11) % 10;
  let moduloB = ((somaB * 10) % 11) % 10;
  return cpf.replace(/\d{9}(\d{2})$/g, '$1') == ("" + moduloA + moduloB);
}

Você pode testar esse código Ici.

Code de validation CPF pour PHP

O código abaixo é de uma função em PHP otimizada para ter o menor numero de complexidade ciclomática que consegui baseado na explicação presente no artigo Algoritimo de validação de CPF brasileiro – Cadastro de Pessoa Física. Ele tem uma ligeira alteração no momento do cálculo do segundo digitido verificador. Ao invés de começar pelo segundo algarismo, o codigo começa pelo primeiro e usa o valor 11 como multiplicador. Outra alteração visivel é que para evitar a necessidade de comparação para saber se estamos no nono e decimo digitos, atribuo o valor zero ao ultimo elemento (indice 10) para reduzir mais uma comparação.

O algoritmo utilizado é o método 1 explicado no artigo citado anteriormente e há um pequeno truque para evitar a comparação com o resto igual a 10 que é fazer o módulo de 10 do resto.

   // Codigo que valida um CPF informado quanto a validade de seus dígitos verificadores.

   /**
     * 
     * Verifica se um CPF é válido
     * @author Marcos Regis <marcos@marcosregis.com>
     * @param  string $cpf
     * @return bool
     */
    function validar(string $cpf): bool
    {
        if (strlen($cpf) != 11) {
            return false;
        }
        $elementos = (array)str_split($cpf);
        $elementos[10] = 0; // Reduz uma comparação no calculo de $somaB
        $somaA = 0;
        $somaB = 0;
        foreach ($elementos as $indice => $elemento) {
            $multiplicador = count($elementos) - $indice;
            $somaA += (int)$elemento * (int)($multiplicador > 2 ? $multiplicador - 1 : 0);
            $somaB += (int)$elemento * (int)$multiplicador;
        }

        $moduloA = (($somaA * 10) % 11) % 10;
        $moduloB = (($somaB * 10) % 11) % 10;

        return preg_replace('#\d{9}(\d{2})$#', '$1', $cpf) == $moduloA . $moduloB;
    }

Você pode testar esse código Ici.

Algoritimo de validação de CPF brasileiro –; Inscription individuelle

Neste artigo explicarei passo a passo na transformação de um algorítimo de verificação da validade de um CPF para código em PHP.

Se você já conhece o algorítmo e quer ir direto aos códigos disponíveis, Cliquez ici.

Mas o que é o CPF?

CPF é o acrônimo para Cadastro de Pessoa Física. Ele é um número de documento brasileiro atualmente gerenciado e emitido pela Receita Federal. Todo brasileiro tem o direito (ou o dever) de ter um e somente com ele é possível ter acesso a serviços bancários, matricular-se em cursos de graduação públicos, assumir cargo através de concurso público, ter cartão de crédito, entre outros exemplos.

Composição do CPF

O CPF é composto de onze algarismos, sendo que os ultimos três algarismos possuem significados que explicaremos a seguir.

O nono dígito, lendo da esquerda para a direita, indica a Região Fiscal onde ele foi emitido. Há dez regiões para os algarismo de zero a nove conforme tabela abaixo.

1 – DF, GO, MS, MT e TO
2 – AC, AM, AP, PA, RO e RR
3 – CE, MA e PI
4 – AL, PB, PE, RN
5 – BA e SE
6 – MG
7 – ES e RJ
8 – SP
9 – PR e SC
0 – RS

Os primeiro oito algarismos são o numero base.

Os ultimos dois algarismo são os dígitos verificadores.

Esses dígitos são gerados a partir de cálculos dos nove primeiros algarismos de acordo com a seguintes regras:

Primeiro Dígito verificador

Para o primeiro dígito, pegamos os 8 primeiros algarismos e multiplicamos cada um deles por um número iniciado em 10 e a medida em que vamos avançando para a direita, diminuimos em 1 esse multiplicador e somamos todos os resultados.

Para melhor entendimento, tomemos 123.456.789-XY como exemplo de CPF a ter o digito XY calculado.

1 x 10 = 10
2 x 9 = 18
3 x 8 = 24
4 x 7 = 28
5 x 6 = 30
6 x 5 = 30
7 x 4 = 28
8 x 3 = 24
9 x 2 = 18
Somando 10 + 18 + 24 + 28 + 30 + 30 + 28 + 24 + 18 temos 210.

Agora, com o total obtido temos duas forma de chegar ao digito verificador.

Método 1

Multiplicamos 210 por 10, dividimos por 11 e pegamos o resto.

Temos então: 210 x 10 = 2.100

2.100 / 11 = 190 com resto 10.

Se o resto for 10 o dígito verificador é zero, Sinon, o resto é o dígito verificador.

Dans notre cas, como o resto é igual a 10 o primeiro dígito será 0 (zéro).

Método 2

Obtemos o resto da divisão de 210 por 11.

Temos então: 210 / 11 é igual a 19 com resto 1.

Aqui temos uma regra para quando o resto for 0 (zéro) ou 1 (um). Quando isso acontece o dígito verificador é zéro, do contrário subtraimos o resto de 11 para obter o dígito verificador.

Pour notre cas, como temos resto 1, o nosso primeiro dígito verificador será 0 (zéro).

Segundo dígito verificador

Para obter o segundo dígito verificador, acrescentamos o primeiro dígito verificador aos 9 algarismos iniciais e fazemos novamente o mesmo processo feito para o primeiro dígito, com a diferença de que agora iniciamos a partir do segundo dígito.

Nosso CPF já está com o valor 123.456.789-0X e as operações necessárias estão abaixo.
2 x 10 = 20
3 x 9 = 27
4 x 8 = 32
5 x 7 = 35
6 x 6 = 36
7 x 5 = 35
8 x 4 = 32
9 x 3 = 27
0 x 2 = 0
Somando 20 + 27 + 32 + 35 + 36 + 35 + 32 + 27 + 0 temos 244.

Agora, com o total obtido devemos usar uma das duas formas já explicadas para chegar ao dígito verificador.

Método 1

Multiplicamos 244 por 10, dividimos por 11 e pegamos o resto.

Temos então: 244 x 10 = 2.440

2.440 / 11 = 221 com resto 9.

Se o resto for 10 o dígito verificador é zero, Sinon, o resto é o dígito verificador e no nosso caso temos 9 como segundo dígito verificador.

Método 2

Obtemos o resto da divisão de 244 por 11.

Temos então: 244 / 11 é igual a 22 com resto 2.

Lembrando que temos uma regra para quando o resto for 0 (zéro) ou 1 (um) o dígito verificador é zero.

Caso seja maior que 1 subtraimos esse valor de 11 para obter o dígito verificador.

Pour notre cas, temos 11 ; 2 = 9 como nosso segundo dígito verificador que é o mesmo valor obtido no método 1.

CPF tem um limite para emissão?

Na teoria, podemos ter até 10^8 ou 100.000.000 (cem milhões) de combinações possíveis para cada região. Na prática temos um pouco menos devido ao não uso de algarismos repetidos, par exemple. Embora pareça um número bem grande, ele deverá ser remodelado em algum momento, já que não pode ser reutilizado mesmo quando uma pessoa falece.

Supondo que já existam na região 8 (estadao de São Paulo) cerca de 40 milhões de CPFs emitidos (não consegui dados fidedignos em 2022 por isso estou usando um número aproximado da população residente que é de 44,5 milhões de pessoas), restariam aproximadamente 60 milhões de CPFs disponíveis. Com a atual taxa de crescimento de CPFs (ano de 2022) em cerca de 600 mil por ano, o sistema deve aguentar pouco menos de 100 années.

Chegamos aqui ao final da explicação e do exemplo sobre a composição do CPF. O nosso CPF de exemplo ficou como 123.456.789-09. Abaixo temos alguns exemplos de códigos tanto para gerar os dígitos verificadores, quanto para validá-los.

Códigos

Version PHP.

Version JavaScript.

Docker sur Ubuntu. Service nginx n'a pas réussi à construire: ADD a échoué: stat /var/lib/docker/tmp/docker-builder(;)/startup.sh: aucun fichier ou répertoire de ce genre

Docker à Ubuntu

Parfois, lors de l’utilisation de Laradock, cette erreur se produit après avoir essayé une reconstruction de conteneur avec no such file or directory message sur docker-compose up -d –build nginx Commande.

Ce n’est pas clair pour moi quelle est la question actuelle, mais en cours d’exécution de la commande avec sudo, nous pouvons l’exécuter avec succès.

Seems that the regular user need access rights to directory /var/lib/docker/tmp/ but do not have. So, running with sudo the trouble is bypassed and the build can finished normally.

Après la construction de conteneurs avec sudo, est possible de le décharger et de recharger sans sudo.

Tables de données + HTML 5 Boutons d’exportation + Laravel-Mix (Webpack)

Dans les derniers jours, J’ai connu un problème en essayant d’utiliser Tables de données et Bootstrap 4 avec le soutien de l’exportation des résultats Excel et PDF à l’aide Laravel-Mix. Après des heures et des heures à essayer de mettre tous les scripts pour travailler ensemble, Je gagne enfin. Alors, J’ai décider d’écrire ce petit Comment pour ceux qui ont le même genre de troubles.



Continuer la lecture >>

À l’aide de jQueryMask Plugin au format dates dans différents modèles

Masque de Plugin jQuery est une grande bibliothèque Javascript pour les champs de format pour la présentation ou de forcer une entrée correctement par les utilisateurs.

Ici, Je montre comment faire face à l’entrée ou un autre élément HTML pour afficher des dates quand la date de la source a un format différent de l’élément cible.

Exemple de:

  • Nous avons un datetime avec Année-mois-jour heure:Minute:Secondes et le besoin de ne montrer que la Année/mois/jour partie.
  • Nous avons da date Année-mois-jour et il fallait formater à Jour/mois/année.

jQueryMask est très simple à utiliser. Il est inutile de beaucoup pour masquer tout ce que vous devez. Jetez un oeil à exemples sur son site Internet.

Si vous avez besoin pour mettre en forme un champ date simple (même d’un élément non-input), Il suffit d’utiliser le code ci-dessous.

jQuery('[données-rôle ="Date"]).masque("TC99/M9/D9", {
        espace réservé: "____/__/__",
        translation: {
            "D": {modèle: /[0-3]/, en option: faux, récursif: true},
            "M": {modèle: /[01]/, en option: faux, récursif: true},
            "T": {modèle: /[12]/, en option: faux, récursif: true},
            "C": {modèle: /[09]/, en option: faux, récursif: true}
        }
    });

Le code ci-dessus peut masquer et valider des dates dans ANNÉE/MOIS/JOUR format.

Avec une entrée comme

<;input type ="texte" données-rôle ="Date" valeur ="2018-06-11 15:47" />;

changerait sa valeur à 2018/06/11.

Si vous essayez de taper une autre date (après clear, Bien sûr) vous ne pouvez pas commencer par un chiffre différent de 1 ou 2. Cette raison est que notre masque ont une traduction à faire lorsque vous autorisez des caractères. Si le modèle ne correspond pas, le char est effacée.

The meaning of “;TC99/M9/D9; le masque est:

  • Doit commencer par 1 ou 2 (Translation T: /[12]/ ; Format personnalisé)
  • Devez disposer du numéro 0 ou 9 (Traduction C: /[09]/ ; Format personnalisé)
  • Doit avoir un numéro (n’importe quel) (Translation 9 ; Format de base de MaskPlugin)
  • Doit avoir un numéro (n’importe quel) (Translation 9 ; Format de base de MaskPlugin)
  • Une barre oblique s’ajouteront automatique ( / )
  • Devez disposer du numéro 0 ou 1 (Traduction M: /[01]/ ; Format personnalisé)
  • Doit avoir un numéro (n’importe quel) (Translation 9: Format de base de MaskPlugin)
  • Une barre oblique s’ajouteront automatique ( / )
  • Devez disposer du numéro 0, 1, 2 ou 3 (Traduction D: /[0-3]/ ; Format personnalisé)
  • Doit avoir un numéro (n’importe quel) (Translation 9: Format de base de MaskPlugin)

Bien sûr, Il n’y a aucune véritable validation. You can type “;2999/19/39; et ce n’est pas une date valide, mais est presque fini.

Alors, pour mettre en forme une autre manière, Il suffit de changer ordre de paramètre de masque.

Mais, Si la date de la source se trouve dans un modèle différent, comme le jour/mois/année, le masque ne fonctionnent pas. The date output for “;06/11/2018 15:40; will be weird “;1018/15/0;.

Pour gérer les dates différentes formats il faudra plus qu’un masque simple. Nous aurons besoin d’une fonction.

Regardez le code ci-dessous

        var maskBehaviorDateTime = function (Val, et, domaine) { // Cette fonction doit retourner un masque var msk = "TC99/M9/D9"; // Notre format désiré var v = field.is(« entrée ») ? Field.Val() : Field.Text(); // une entrée ou un autre élément html??
                    v = v.replace(/\D/g, ''); // Stripe chiffres non si (v != '') { // a la valeur?
                        If ((/^[01]\d[0-3]\dd{4}$/).test(v)) { //vérifier si le modèle correspond à v seul jour/mois/année = v.replace(/^(\d{4})(\d{2})(\d{2})$/, ' $3 / $2 / $1 ');
                        } sinon si ((/^[01]\d[0-3]\dd{4}[012]\d[0-5]\d$ /).test(v)) { //vérifier si le modèle correspond à l’heure de jour/mois/année:Minute v = v.replace(/^(\d{2})(\d{2})(\d{4})(\d{2})(\d{2})$/, ' $3 / $2 / $1 ');
                            // Si nous devons montrer l’heure et minute, masque retourné doit être changé aussi
                            // v = v.replace(/^(\d{2})(\d{2})(\d{4})(\d{2})(\d{2})$/, ' $3 / $2 / $1 $4:$5');
                            // MSK = ' TC99/M9/D9 h9:M9'; // h et m doivent être existe dans les options de traduction
                        }
                        Field.is(« entrée ») ? Field.Val(v) : Field.Text(v);
                    }
                    retour de msk;
                },
                optionsDateTime = {
                    espace réservé: "____/__/__",
                    translation: {
                        "D": {modèle: /[0-3]/, en option: faux, récursif: true},
                        "M": {modèle: /[01]/, en option: faux, récursif: true},
                        "T": {modèle: /[12]/, en option: faux, récursif: true},
                        "C": {modèle: /[09]/, en option: faux, récursif: true},
                        "h": {modèle: /[0-2]/, en option: true, récursif: true},
                        "m": {modèle: /[0-5]/, en option: true, récursif: true}
                    }
                };
        jQuery('[données-rôle ="Date"]').masque(maskBehaviorDateTime,  optionsDateTime);

Nous avons maintenant deux modèle de traduction plus (h et m). h signifie que la position n-index doit avoir des nombres 0, 1 ou 2 et m nombres entre 0 et 5. N’oubliez pas que l’affaire des questions.

Avec le code ci-dessus, Nous pouvons formater et afficher la date de plusieurs façons. Il suffit de changer .test() et .remplacer() modèle pour remplir votre motif désiré.

C’est le code que j’utilise pour mettre en forme les champs de la base datetime avec l’année-mois-jour heure:MINUTE:DEUXIÈME dans les éléments html avec heure jour/année/mois:MINUTE

    var maskBehaviorDateTime = function (Val, et, domaine) {
            // S’il y a déjà une valeur, les formats dans le jj/mm/aaaa standard avec le hh en option:mm:msk var SS = "TC99/M9/D9 h9:M9:S9";
            If (champ d’attr.("valeur date d’origine") == undefined) {
                var o = field.is(« entrée ») ? Field.Val() : Field.Text();
            } d’autre {
                var attr = champ.("valeur date d’origine");
            }
            v = la. remplacer(/\D/g, '');
            If (v != '') {
                champ d’attr.("valeur date d’origine") == undefined &;&; champ d’attr.("valeur date d’origine", le);
                If ((/^[12][09]\d{2}[01]\d[0123]\d$ /).test(v)) { // année/mois/jour v = v.replace(/^(\d{4})(\d{2})(\d{2})$/, ' $3 / $2 / $1 ');
                    MSK = "D9/M9/TC99";
                } sinon si ((/^[12][09]\d{2}[01]\d[0123]\d[012]\d[0-5]\d$ /).test(v)) { // année/mois/jour heure:minute v = v.replace(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})$/, ' $3 / $2 / $1 $4:$5');
                    MSK = "D9/M9/TC99 h9:M9";
                } sinon si ((/^[12][09]\d{2}[01]\d[0123]\d[012]\d[0-5]\d[0-5]\d$ /).test(v)) { // année/mois/jour heure:minute:deuxième v = v.replace(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/, ' $3 / $2 / $1 $4:$5:$6');
                    MSK = "D9/M9/TC99 h9:M9:S9";
                }
                Field.is(« entrée ») ? Field.Val(v) : Field.Text(v);
            }

            retour de msk;
        },
        optionsDateTime = {
            espace réservé: "__/__/____",
            translation: {
                "D": {modèle: /[0-3]/, en option: faux, récursif: true},
                "M": {modèle: /[01]/, en option: faux, récursif: true},
                "T": {modèle: /[12]/, en option: faux, récursif: true},
                "C": {modèle: /[09]/, en option: faux, récursif: true},
                "h": {modèle: /[0-2]/, en option: true, récursif: true},
                "m": {modèle: /[0-5]/, en option: true, récursif: true},
                "s": {modèle: /[0-5]/, en option: true, récursif: true}
            },
        };
    jQuery('[données-rôle ="Date"]').masque(maskBehaviorDateTime,  optionsDateTime);

Avec une entrée comme

<;input type ="texte" données-rôle ="Date" valeur ="2018-06-11 15:40">;

La sortie sera

11/06/2018 15:40

J’espère que cela vous aider!

Liaison de plusieurs valeurs dans une requête SQL PDO (PDOStatement)

Parfois nous avons besoin de rechercher une valeur unique par le biais de plusieurs colonnes lorsque vous créez des instructions SQL.

Supposons que la table ci-dessous

  • [ENTITY_ONE]
    • ID
    • COLUMN_A
    • COLUMN_B
    • COLUMN_C
    • COLUMN_D
    • COLUMN_E

Si nous avons besoin de rechercher une valeur unique sur les colonnes B,D et E Nous allons besoin d’utiliser l’instruction suivante

SÉLECTIONNEZ L’ID, COLUMN_A,(...COLONNES...), COLUMN_E de ENTITY_ONE où COLUMN_B comme « % search_value % » ou COLUMN_D comme « % search_value % » ou COLUMN_E comme « % search_value % »;

Dans le code PHP que nous pouvons faire

$q = « % search_value % »;
$SQL = "SÉLECTIONNEZ * DE ENTITY_ONE OÙ COLUMN_B COMME « $q » OU COLUMN_D COMME « $q » OU COLUMN_E COMME « $q »; 
$pdo = nouvel AOP($Dsn, $Utilisateur, $Passer); 
$stmt = $pdo->;Requête($Sql);

Eh bien, this can work but we know that isn’;t la meilleure approche. Nous avons besoin utilisation valeurs contraignantes pour éviter l’injection SQL et autres gâteries malveillants.

Alors, le code peut être modifié pour

$q = « % search_value % »; 
$SQL = "SÉLECTIONNEZ * DE ENTITY_ONE OÙ COLUMN_B COMME ? OU COLUMN_D COMME ? OU COLUMN_E COMME ?; 
$args = [$Q, $Q, $Q]; // Nous avons besoin d’une entrée pour chaque "?" on instruction
$pdo = new PDO($Dsn, $Utilisateur, $Passer); 
$stmt = $pdo->;Préparer($Sql);
$stmt->;Exécuter($Args);

Beaucoup mieux, mais, lors de la construction complexe instruction SQL, things can be confusing with lots of arguments and don’;t oublier: QUESTIONS D’ORDRE.

Heureusement AOP peut lier des valeurs en ordre différent quand à l’aide de nommé les liaisons.

$q = « % search_value % »; 
$SQL = "SÉLECTIONNEZ * DE ENTITY_ONE OÙ COLUMN_B COMME :first_arg OU COLUMN_D LIKE :second_arg OU COLUMN_E LIKE :third_arg; 

$pdo = nouvel AOP($Dsn, $Utilisateur, $Passer); 
$stmt = $pdo->;Préparer($Sql); 
// One way
$args = [':first_arg' =>; $Q, ':third_arg' =>;$Q, ':second_arg' =>; $Q]; // Nous avons besoin d’une entrée pour chaque ":Nom" on instruction 
$stmt->;Exécuter($Args); 
// Another way
$stmt->;bindValue(':third_arg'. $Q);
$stmt->;bindValue(':first_arg', $Q); 
$stmt->;bindValue(':second_arg', $Q);

$stmt->;Exécuter(); 

Hmm, seems that this isn’;t assez bon. Nous changeons seulement l’utilisation de 1-espace réservé indexée pour un :espace réservé nommé. There’;s aucun gain au-delà du code lisible et la possibilité de lier à n’importe quel ordre.

Oui, mais maintenant, nous pouvons faire la meilleure approche lors de l’utilisation d’un terme de recherche unique en plusieurs colonnes. Nous pouvons utiliser qu’une seule liaison à un ou plusieurs :named placeholders ’;cause AOP est intelligent et astucieux. Regardez notre code final ici.

$q = « % search_value % »; 
$SQL = "SÉLECTIONNEZ * DE ENTITY_ONE OÙ COLUMN_B COMME :unique_arg ou COLUMN_D comme :unique_arg ou COLUMN_E comme :unique_arg; 
$pdo = nouvel AOP($Dsn, $Utilisateur, $Passer); 
$stmt = $pdo->;Préparer($Sql); 
// Une façon $args = [':unique_arg' =>; $Q]; // Nous pouvons lier tous les :name with only one term 
$stmt->;Exécuter($Args); 
// Another way 
$stmt->;bindValue(':unique_arg', $Q); 
$stmt->;Exécuter(); 

Peut sauver beaucoup de frappe lors de l’écriture de nombreuses instructions SQL en utilisant le même argument.

Nommage des fichiers à l'aide de la liste de 0 à Z

Aujourd'hui j'ai était codage certains scripts et trouvé un peu de mal à utiliser un modèle défini.

Le modèle consiste à créer des fichiers où la séquence commence dans 0 (zéro) et ne peut être répété jusqu'à Z.

Exemple de:

myfile0.ext, myfile1.ext, myfile2.ext, (...), myfile9.ext, myfileA.ext, myfileB.txt, (...), myfileZ.txt

Eh bien, ce n'est pas un gros problème, alors j'ai utilisé ce code.

// Filename
$seq = $last_used_seq = '';
$seqs = array_merge(range('0','9'), range('A', 'Z'));]
$l = 1;
while (!in_array($seq, $seqs)) {
    $seq = chr(ord($last_used_seq) + $l++);
}

Mais

$Seq

donné pas la valeur attendue de 0 (zéro) sur la première manche. Au lieu de cela, il était vide.

Les variables de débogage, J'ai vu que le while jamais la valeur true. Tenter de reproduire sur la ligne de commande, j’ai vu que

in_array($Seq, $seqs);

retourne toujours true. J'ai essayé d'utiliser “”, “R” et peu importe de quelle valeur, j'ai utilisé, encore de retour true.

Donc j’ai changer pour utiliser STRICT argument en faveur de in_array to true and works for ‘;A’; through ‘;Z’;, but not for ‘;0; through ‘;9;.

while (!in_array($seq, $seqs, true)) {
    $seq = chr(ord($last_used_seq) + $l++);
}

Damn…; PHP est juste, ;0; n'est pas strictement égal à 0. Le Chr retour de fonction string et

gamme(« 0 », « 9 »)

crée un array avec integer valeurs.

Alors, J'ai changé l'approche pour évaluer toutes les valeurs par STRICT, parce que je voudrais créer un code sympa et propre, sans aucune autre fonction à utiliser.

This is the final code that I’;à l’aide de m:

// Valeurs $seq initiales = '';
$seqs = array_merge(gamme(ORD(« 0 »),ORD(« 9 »)), gamme(ORD(« A »), ORD(« Z »)));
$seqs = array_map(« chr », $seqs);
$l = 1;
tout en (!in_array($Seq, $seqs, true)) {
    $Seq = chr(ORD($infos[« last_seq »]) + $l ++);
}

// Noms de fichier foreach ($itens_for_files as $key =>; $itens) {
    // ... Un autre codes pour remplir le fichier $seq = chr(ORD($Seq) + 1);
    tout en (!in_array($Seq, $seqs, true)) {
    $Seq = chr(ORD($Seq) + 1);
    $filename = « myfile » . $Seq . « .ext »;
    // ...
}

Comment vous pouvez voir, J'ai changé le $seqs initial values from ‘;0; à votre ASCII code et revenir à votre valeur qui m'a donné un array avec toutes les valeurs de string type de.

A la prochaine!

Erreur de comparaison PHP

Aujourd'hui, J'ai écrit un script en PHP pour être utilisé dans la ligne de commande lorsque je suis tombé sur un comportement inattendu (au moins de ma part).
Le script devrait recevoir trois arguments, le dernier d'entre eux une liste contenant un ou plusieurs codes numériques.
Essayant de valider ce dernier argument a été d'obtenir un résultat différent qu'imaginé.
Voir l'extrait de code que j'utilisais:

// test.php si (php_sapi_name() == « cli ») {
    $di = isset($argv[1]) ? $argv[1] : Date("Y-m-d"); // Première Date $df = isset($argv[2]) ? $argv[2] : Date("Y-m-d"); // Date limite $prods = isset($argv[3]) ? exploser(',', $argv[3]) : Tableau(); // Liste de codes

    ##### Validation de
    // Première Date si ($di != date("Y-m-d", strtotime($di))) {
        ECHO "\n";
        ECHO "ERREUR! DATE initiale non valide!\n";
        sortie;
    }
    // Date limite si ($DF != date("Y-m-d", strtotime($DF))) {
        ECHO "\n";
        ECHO "ERRO! DATE finale non valide!\n";
        sortie;    
    }

    // Si des codes (comte($prods) >; 0) {
        foreach ($prods comme $prod) {
            If ($prod != (int)$prod) {
                ECHO "\n";
                ECHO "ERREUR! Le CODE " . $prod . " n'est pas valide!\n" ;
                sortie;
            }
        }
    }
    ECHO "FAIT!";
}

Continuer la lecture >>

jQuery.html() ne fonctionne pas dans Internet Explorer

J'ai récemment eu des problèmes avec un code javascript qui utilise jQuery et cela a fonctionné dans les différents navigateurs comme Chrome, le Firefox et certaines versions de Internet Explorer, mais qui refuse obstinément de fonctionner Internet Explorer 7 et 8.
Le code de suivi:

$.Publier(URL,{ Options }, 
  fonction (réponse) {
     $(« #myElement »).HTML(réponse);
  },
« texte »);

Après quelques essais, j'ai réalisé qu'il y avait un problème de méthode, comme dans d'autres codes, il s'est comporté comme prévu.
Donc le code de débogage soigneusement et les réponses de la méthode Ajax réalisée une erreur de syntaxe petit dans le code HTML et c'était juste l'IE fix 7 afficher correctement la réponse.
Suit alors la pointe, Si vous avez des problèmes avec la méthode jQuery.html(), Vérifiez d'abord si le contenu en cours d'écriture dans l'élément est un code html sans erreurs, parce que la validation IE 7/8 écrira HTML sans erreur, Peu importe la taille.