Вы знаете какое-то регулярное выражение, чтобы санкционировать NIE?

У меня есть регулярное выражение, чтобы санкционировать удостоверение личности, но нет способа находить одну, чтобы санкционировать NIE и удостоверение личности, или по крайней мере одна, которую санкционировал бы NIE.

Это, чтобы санкционировать формуляр с персонализированными утверждениями (ValidationAttribute).

Если вы можете бросать мне кабель, он вам был бы благодарен за это.

3
задан 10.03.2016, 14:36
3 ответа

Я нашел функцию, которая функционирует в совершенство и cortita:

 public class DNIAttribute : ValidationAttribute
{
    public override bool IsValid(object NIF)
    {
        string patron = "[A-HJ-NP-SUVW][0-9]{7}[0-9A-J]|\\d{8}[TRWAGMYFPDXBNJZSQVHLCKE]|[X]\\d{7}[TRWAGMYFPDXBNJZSQVHLCKE]|[X]\\d{8}[TRWAGMYFPDXBNJZSQVHLCKE]|[YZ]\\d{0,7}[TRWAGMYFPDXBNJZSQVHLCKE]";
        string sRemp = "";
        bool ret = false;
        System.Text.RegularExpressions.Regex rgx = new System.Text.RegularExpressions.Regex(patron);
        sRemp = rgx.Replace(NIF.ToString(), "OK");
        if (sRemp == "OK") ret = true;
        return ret;
    }
}

шрифт: http://comino.blogspot.com.es/2012/05/como-validar-la-entrada-del-cif-nif-nie.html

Спасибо в любом случае в тех, что вы ответили, также я буду нуждаться в codijo javascript и он я поможет ;-)

1
ответ дан 24.11.2019, 14:45
  • 1
    У него есть хорошая внешность, играет роль что-то сходным с тем, что он комментировал тебе в моем ответе используя |, чтобы иметь expresi и # 243; n регулировать условно, - этот случай я считал 5. Так или иначе ты не быть и # 237; в comprobaci и # 243; n d и # 237; gito контроля, который это не может делать себе с expresi и # 243; n регулировать (он зависит, которого est и # 233; s делая, равный также ты не нуждаешься в этом). Привет – rsciriano 10.03.2016, 17:32

В этой статье ты можешь encontar алгоритмы утверждения NIF, NIE и удостоверения личности, у которых, хотя они находятся в языке сценариев JavaScript, есть очень хорошая внешность. Переводить их в C# не было бы должно быть сложным. Код - следующий:

function nif_valido($nif) {
    $nif = strtoupper($nif);

    $nifRegEx = '/^[0-9]{8}[A-Z]$/i';
    $nieRegEx = '/^[XYZ][0-9]{7}[A-Z]$/i';

    $letras = "TRWAGMYFPDXBNJZSQVHLCKE";

    if (preg_match($nifRegEx, $nif)) return ($letras[(substr($nif, 0, 8) % 23)] == $nif[8]);
    else if (preg_match($nieRegEx, $nif)) {
        if ($nif[0] == "X") $nif[0] = "0";
        else if ($nif[0] == "Y") $nif[0] = "1";
        else if ($nif[0] == "Z") $nif[0] = "2";

        return ($letras[(substr($nif, 0, 8) % 23)] == $nif[8]);
    }
    else return false;
}

function cif_valido($cif) {
    $cif = strtoupper($cif);

    $cifRegEx1 = '/^[ABEH][0-9]{8}$/i';
    $cifRegEx2 = '/^[KPQS][0-9]{7}[A-J]$/i';
    $cifRegEx3 = '/^[CDFGJLMNRUVW][0-9]{7}[0-9A-J]$/i';

    if (preg_match($cifRegEx1, $cif) || preg_match($cifRegEx2, $cif) || preg_match($cifRegEx3, $cif)) {
        $control = $cif[strlen($cif) - 1];
        $suma_A = 0;
        $suma_B = 0;

        for ($i = 1; $i < 8; $i++) {
            if ($i % 2 == 0) $suma_A += intval($cif[$i]);
            else {
                $t = (intval($cif[$i]) * 2);
                $p = 0;

                for ($j = 0; $j < strlen($t); $j++) {
                    $p += substr($t, $j, 1);
                }
                $suma_B += $p;
            }
        }

        $suma_C = (intval($suma_A + $suma_B)) . "";
        $suma_D = (10 - intval($suma_C[strlen($suma_C) - 1])) % 10;

        $letras = "JABCDEFGHI";

        if ($control >= "0" && $control <= "9") return ($control == $suma_D);
        else return (strtoupper($control) == $letras[$suma_D]);
    }
    else return false;
}

Относительно утверждения возможно дифференцировать две части, первая одна, которая может делаться с регулярными выражениями и которую он обеспечивает себе, которого формат - правильный и вторая фаза, которую он вычисляет и подтверждает цифру контроля.

То, что ты мог бы делать, состоит в том, чтобы выполнять утверждение с регулярным выражением в клиенте и реализовывать второе утверждение на сервере, где ты подтвердил цифры контроля

Ты можешь строить регулярное условное выражение используя | что включает два утверждения:

^([0-9]{8}[A-Z])|[XYZ][0-9]{7}[A-Z]$

И pos, если ты не надеешься слишком много алгоритмов, здесь у тебя есть страница министерства внутренних дел со спецификациями вычисления цифры контроля

4
ответ дан 24.11.2019, 14:45

Ты мог бы оценивать прокомментированное здесь

ValidaciГіn CIF, NIF и NIE

я понимаю, что важная серьезная часть

const string correspondencia = "TRWAGMYFPDXBNJZSQVHLCKET";

if (!Regex.IsMatch(nie, @"[K-MX-Z]\d{7}[" + correspondencia + "]$")){
   //invalida
}
1
ответ дан 24.11.2019, 14:45

Теги

Похожие вопросы