Implement UID check

This commit is contained in:
2023-04-16 22:35:23 +02:00
parent 569d7f2cc4
commit d049424615

View File

@ -247,20 +247,72 @@ namespace Elwig.Helpers {
} }
// https://statistik.at/fileadmin/shared/QM/Standarddokumentationen/RW/std_r_land-forstw_register.pdf#page=41 // https://statistik.at/fileadmin/shared/QM/Standarddokumentationen/RW/std_r_land-forstw_register.pdf#page=41
int s = 0; int s = 0, v = 0;
for (int i = 0; i < 6; i++) for (int i = 0; i < 6; i++)
s += (input.Text[i] - '0') * (7 - i); s += (input.Text[i] - '0') * (7 - i);
s = (11 - (s % 11)) % 10; v = (11 - (s % 11)) % 10;
if (s != (input.Text[6] - '0')) if (v != (input.Text[6] - '0'))
return new(false, "Prüfsumme der Betriebsnummer ist falsch"); return new(false, "Prüfsumme der Betriebsnummer ist falsch");
return new(true, null); return new(true, null);
} }
public static ValidationResult CheckUstId(TextBox input, bool required) { public static ValidationResult CheckUstId(TextBox input, bool required) {
// TODO string text = "";
return new(true, "Not implemented yet"); int pos = input.CaretIndex;
for (int i = 0, v = 0; i < input.Text.Length; i++) {
char ch = input.Text[i];
if (v < 2 && char.IsAscii(ch) && char.IsLetter(ch)) {
v++;
text += char.ToUpper(ch);
} else if (v >= 2 && char.IsAscii(ch) && char.IsLetterOrDigit(ch)) {
if (text.StartsWith("AT")) {
if (v == 2 && (ch == 'u' || ch == 'U')) {
v++;
text += 'U';
} else if (v > 2 && char.IsDigit(ch)) {
v++;
text += ch;
}
} else {
v++;
text += char.ToUpper(ch);
}
}
if (i == input.CaretIndex - 1) {
pos = text.Length;
} else if (v >= 14) {
break;
} else if (text.StartsWith("AT") && v >= 11) {
break;
}
}
input.Text = text;
input.CaretIndex = pos;
if (text.Length == 0)
return required ? new(false, "UID ist nicht optional") : new(true, null);
if (text.StartsWith("AT")) {
if (text.Length != 11 || text[2] != 'U')
return new(false, "UID ist ungültig");
// http://www.pruefziffernberechnung.de/U/USt-IdNr.shtml
int s = 0, v = 0;
for (int i = 0; i < 8; i++)
s += ((text[i + 3] - '0') * (i % 2 + 1)).ToString().Select(ch => ch - '0').Sum();
v = (96 - s) % 10;
if (v != (text[10] - '0'))
return new(false, "Prüfsumme der UID ist falsch");
} else {
return new(false, "Not implemented yet");
}
return new(true, null);
} }
public static ValidationResult CheckMgNr(TextBox input, bool required, AppDbContext ctx, Member? m) { public static ValidationResult CheckMgNr(TextBox input, bool required, AppDbContext ctx, Member? m) {