3 MAJ avec reboot obligatoire.
Les serveurs infogérés sont traités cette nuit.
3 MAJ avec reboot obligatoire.
Les serveurs infogérés sont traités cette nuit.
La formule de Lhun permet de vérifier un numéro de carte bleue, un siret, un siren, … tellement utile pour les contrôles de formulaire que je me suis penché sur la question ne trouvant rien de probant sur Internet.
La partie front :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="luhn.aspx.cs" Inherits="luhn" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <span id="spanResult" runat="server"></span> <form> Numéro à vérifier : <input type="text" name="numberToVerify" value="<%=numberToVerify %>" /> <input type="submit" name="mem" value="vérifier" /> </form> </body> </html> |
Juste un formulaire pour envoyer le chiffre, rien de bien palpitant 🙂
La partie programmée :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Text; using System.Text.RegularExpressions; public partial class luhn : System.Web.UI.Page { public string numberToVerify = ""; public int ttlAddition = 0, cpt = 1; public StringBuilder sb = new StringBuilder(); protected void Page_Load(object sender, EventArgs e) { numberToVerify = Request["numberToVerify"] ?? ""; if (numberToVerify != "") { string formatInput = Regex.Replace(numberToVerify, "[^a-zA-Z0-9_]+", "", RegexOptions.Compiled); string reverseCard = new string(formatInput.ToCharArray().Reverse().ToArray()); int[] arrDigits = Array.ConvertAll<string, int>( System.Text.RegularExpressions.Regex.Split(reverseCard.ToString(), @"(?!^)(?!$)"), str => int.Parse(str) ); int[] arrMult = new int[arrDigits.Length]; // première étape de Luhn : On démarre avec le dernier chiffre (à droite) et on se déplace vers la gauche, en doublant la valeur de tous les chiffres de rang pair for (int i = 0; i < arrDigits.Length; i++) { if (cpt == 1) arrMult[i] = arrDigits[i]; // la clé est traitée en 1er, le chiffre n'est pas doublé else { if (cpt % 2 == 0) arrMult[i] = 2 * arrDigits[i]; else arrMult[i] = arrDigits[i]; } cpt++; } // On additionne ensemble tous les chiffres de chaque nombre ainsi obtenu, si chiffre > 10 alors chiffre à additionner donne par ex : 18 = 1 + 8 for (int i = 0; i < arrMult.Length; i++) { if ((int)arrMult[i] >= 10) // si chiffre > 9 il faut re décomposer le chiffre, ex 18 donne : 1+8 { int[] intList = Array.ConvertAll<string, int>( System.Text.RegularExpressions.Regex.Split(arrMult[i].ToString(), @"(?!^)(?!$)"), str => int.Parse(str) ); for (int j = 0; j < intList.Count(); j++) { ttlAddition += (int)intList[j]; } } else ttlAddition += (int)arrMult[i]; } // si modulo par 10 de l'addition est nul alors notre chiffre est valide if (ttlAddition % 10 == 0) spanResult.InnerHtml = "Vérification OK"; else spanResult.InnerHtml = "Vérification Fausse"; } } } |
Quelques remarques :
Quelques liens utiles :
https://fr.wikipedia.org/wiki/Formule_de_Luhn
https://portal.hardis-group.com/pages/viewpage.action?pageId=120357227
Une petite méthode simple et rapide pour compter le nombre d’occurrences identiques dans un array multi dimensionnel :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
var locs = [ { "id": 1, "text": "Dire Straits", "famille": "rock fm" }, { "id": 2, "text": "Simple Minds", "famille": "new wave" }, { "id": 3, "text": "The Cure", "famille": "new wave" }, ]; var numOccurences = 0; var search = "new wave"; // ce que l'on cherche $(document).ready(function () { numOccurences = $.grep(locs, function (pdt) { return pdt.famille === search; }).length; console.log("Nombre d'occurences de " + search + " = " + numOccurences); }); |
Retourne :
Nombre d’occurrences de new wave = 2
CQFD 🙂
3 MAJ avec reboot obligatoire.
Les serveurs infogérés sont traités cette nuit.
Une MAJ importante de sécurité avec reboot obligatoire est à effectuer sur vos Windows.
Tous les serveurs infogérés seront traités cette nuit par nos services.
Trois MAJ importantes avec reboot obligatoires sont à effectuées sur vos Windows.
Tous les serveurs infogérés seront traités cette nuit par nos services.
Vous avez pu remarquer que dans notre console d’infogérance certaines fonctions au niveau du serveur de mails sont manquantes.
Suite à la dernière MAJ de Icewarp nous avons pu découvrir que certaines commandes à l’API ont été modifiées ou non fonctionnelles. Après quelques nuits blanches, nous avons pu corriger dans l’urgence le listing et la création des emails.
Une nouvelle section pour la gestion des emails est en cours de finalisation, utilisant les dernières technologies (aspx + jquery + json + html5) elle devient nettement plus fluide avec une ré écriture complète de nos services qui discutent avec l’API de Icewarp et les nouvelles options apportées par les dernières MAJ. Je pense qu’on pourra publier nos travaux semaine prochaine, il nous reste plus qu’à ajouter la couche de sécurité / RD serveur.
Concernant les mots de passe, suite aux normes RGPD européennes ils ne seront désormais plus accessibles aux administrateurs des sites. Aussi pensez désormais à renseigner l’email alternatif qui vous permettra de re générer un nouveau mot de passe en cas de perte de ce dernier. Cet email peut être également renseigné dans les webmails.
Hébergement vôtre.
Trois MAJ importantes avec reboot obligatoires sont à effectuées sur vos Windows.
Tous les serveurs infogérés seront traités cette nuit par nos services.
Bien pratique les enum afin de lier une valeur entière à un texte, ex : 0 = chat, mais comment lister les valeurs ?
1 2 3 4 5 6 7 8 9 10 11 |
protected enum maListe : int { Default = 0, Chat = 1, Chien = 2 } foreach (var a in Enum.GetValues(typeof(maListe))) { sb.AppendFormat("<li>{0} - {1}</li>", (int)a, a.ToString()); } |
Et voilà on retrouve la valeur numérique et textuelle …
Entre 1 et 2 MAJ obligatoires avec reboot à la clef.
Tous les serveurs de niveau d’infogérance II et plus seront traités cette nuit.