C# 验证组织/公司编号的c代码?

C# 验证组织/公司编号的c代码?,c#,javascript,regex,validation,C#,Javascript,Regex,Validation,我有一个验证组织/公司编号的javascript,但我需要c#格式。有人有这样的东西吗 这不是一项作业,我可以自己翻译,但如果有人已经完成了,我就不必完成这项工作=) 如果它是针对特定国家的,我需要在瑞典使用它 这里是javascript,可以在 职能机构制造商(nr){ this.valid=false; 如果(!nr.match(/^(\d{1})(\d{5})\-(\d{4})$/) { 返回false; } this.group=RegExp.$1; this.controldigits

我有一个验证组织/公司编号的javascript,但我需要c#格式。有人有这样的东西吗

这不是一项作业,我可以自己翻译,但如果有人已经完成了,我就不必完成这项工作=)
如果它是针对特定国家的,我需要在瑞典使用它

这里是javascript,可以在

<代码>职能机构制造商(nr){ this.valid=false; 如果(!nr.match(/^(\d{1})(\d{5})\-(\d{4})$/) { 返回false; } this.group=RegExp.$1; this.controldigits=RegExp.$3; this.alldigits=this.group+RegExp.$2+this.controldigits; if(此.alldigits.substring(2,3)<2) { 返回错误 } var nn=“”; 对于(var n=0;n 提前谢谢

有一个在线服务

可能有,可能至少有一个适合帮助你做部分对话


另一方面,手动转换这几行似乎相当简单。

更可靠的实现

static bool OrganisationsNummer(string nr)
{
    Regex rg = new Regex(@"^(\d{1})(\d{5})\-(\d{4})$");
    Match matches = rg.Match(nr);

    if (!matches.Success)
        return false;

    string group = matches.Groups[1].Value;
    string controlDigits = matches.Groups[3].Value;
    string allDigits = group + matches.Groups[2].Value + controlDigits;

    if (Int32.Parse(allDigits.Substring(2, 1)) < 2)
        return false;

    string nn = "";

    for (int n = 0; n < allDigits.Length; n++)
    {
        nn += ((((n + 1) % 2) + 1) * Int32.Parse(allDigits.Substring(n, 1)));
    }

    int checkSum = 0;

    for (int n = 0; n < nn.Length; n++)
    {
        checkSum += Int32.Parse(nn.Substring(n, 1));
    }

    return checkSum % 10 == 0 ? true : false;
}
/// <summary>
/// Immutable value type for storing personal numbers
/// </summary>
public struct PersonalNumber : IEquatable<PersonalNumber>
{
    private const string YearHundredOpt = @"(19|20)?"; // 19 or 20 only (optional)
    private const string YearDecade = @"(\d{2})"; // any two digits
    private const string Month = @"(0[1-9]|10|11|12)"; // 01 to 12
    private const string Day = @"(0[1-9]|1\d|2\d|30|31)"; // 01 to 31
    private const string SeparatorAndLastFourOpt = @"([-\+]?)(\d{4})?"; // optional - or + followed by any four digits (optional)

    private const string RegExForValidation =
        "^" + YearHundredOpt + YearDecade + Month + Day + SeparatorAndLastFourOpt + "$";

    private static readonly Regex personNoRegex = new Regex(RegExForValidation, RegexOptions.Compiled);

    private readonly string rawPersonalNumber;
    private readonly string personalNumber;
    private readonly bool isValid;
    private readonly bool isPlus100YearsOld;

    public PersonalNumber(string personalNumber)
    {
        rawPersonalNumber = personalNumber;

        var matches = personNoRegex.Matches(personalNumber);
        var normalizedYYMMDDXXXC = string.Empty;
        isPlus100YearsOld = false;
        foreach (Match match in matches)
        {
            if (match.Success)
            {
                normalizedYYMMDDXXXC = match.Groups[2].Value + match.Groups[3].Value +
                              match.Groups[4].Value + match.Groups[6].Value;
                if (match.Groups[5].Success)
                {
                    isPlus100YearsOld = match.Groups[5].Value == "+";
                }
                break;
            }
        }

        if (normalizedYYMMDDXXXC.Length > 6)
        {
            isValid = personNoRegex.IsMatch(personalNumber) && LuhnAlgorithm.ValidateChecksum(normalizedYYMMDDXXXC);
        }
        else
        {
            isValid = personNoRegex.IsMatch(personalNumber);
        }

        this.personalNumber = string.IsNullOrEmpty(normalizedYYMMDDXXXC) ? rawPersonalNumber : normalizedYYMMDDXXXC;
    }

    public string Number { get { return personalNumber; } }
    public bool IsPlus100YearsOld { get { return isPlus100YearsOld; } }
    public bool IsValid { get { return isValid; } }
    public bool IsMale { get { return !IsFemale; } }

    public bool IsFemale
    {
        get
        {
            var genderCharacter = personalNumber.Substring(personalNumber.Length - 2, 1); // second to last character
            return int.Parse(genderCharacter) % 2 == 0; // even = female, odd = male
        }
    }

    public override string ToString() { return Number; }

    public bool Equals(PersonalNumber other)
    {
        return Equals(other.personalNumber, personalNumber);
    }

    public override bool Equals(object obj)
    {
        if (ReferenceEquals(null, obj)) return false;
        if (obj.GetType() != typeof (PersonalNumber)) return false;
        return Equals((PersonalNumber) obj);
    }

    public override int GetHashCode()
    {
        unchecked
        {
            int result = (rawPersonalNumber != null ? rawPersonalNumber.GetHashCode() : 0);
            result = (result*397) ^ (personalNumber != null ? personalNumber.GetHashCode() : 0);
            result = (result*397) ^ isValid.GetHashCode();
            return result;
        }
    }

    public static bool operator ==(PersonalNumber left, PersonalNumber right)
    {
        return left.Equals(right);
    }

    public static bool operator !=(PersonalNumber left, PersonalNumber right)
    {
        return !left.Equals(right);
    }
}
//
///用于存储个人号码的不可变值类型
/// 
public struct PersonalNumber:IEquatable
{
private const string YearHundredOpt=@“(19|20)?;//仅限19或20(可选)
private const string YearDecade=@“(\d{2})”;//任意两位数字
private const string Month=@“(0[1-9]| 10 | 11 | 12);//01到12
private const string Day=@“(0[1-9]| 1\d | 2\d | 30 | 31);//01到31
private const string separator和lastfouropt=@“([-\+])(\d{4}”);//可选-或+后跟任意四位数字(可选)
私有常量字符串RegExForValidation=
“^”+年百分位数+年十位数+月+日+分隔符和最后四位数+“$”;
私有静态只读Regex personNoRegex=newregex(RegExForValidation,RegexOptions.Compiled);
私有只读字符串编号;
私有只读字符串personalNumber;
私有只读bool是有效的;
私有只读bool isplus100yearsed;
公共PersonalNumber(字符串PersonalNumber)
{
rawPersonalNumber=个人号码;
var matches=personNoRegex.matches(personalNumber);
var normalizedyymddxxxc=string.Empty;
isplus100yearsell=假;
foreach(匹配中的匹配)
{
如果(匹配成功)
{
normalizedyymddxxxc=match.Groups[2]。值+match.Groups[3]。值+
match.Groups[4]。Value+match.Groups[6]。Value;
if(match.Groups[5]。成功)
{
isplus100yearsell=match.Groups[5]。值==“+”;
}
打破
}
}
如果(规格化YYMMDDXXXC.Length>6)
{
isValid=personNoRegex.IsMatch(personalNumber)和&LuhnAlgorithm.ValidateChecksum(normalizedyymmdxxxc);
}
其他的
{
isValid=personNoRegex.IsMatch(personalNumber);
}
this.personalNumber=string.IsNullOrEmpty(normalizedyymddxxxc)?rawPersonalNumber:normalizedyymddxxxc;
}
公共字符串编号{get{return personalNumber;}}
公共bool isplus100yearselled{get{return isplus100yearselled;}}
公共bool是有效的{get{return是有效的;}}
公共bool IsMale{get{return!IsFemale;}
公共场所是女性
{
得到
{
var genderCharacter=personalNumber.Substring(personalNumber.Length-2,1);//倒数第二个字符
返回int.Parse(genderCharacter)%2==0;//偶数=女性,奇数=男性
}
}
公共重写字符串ToString(){return Number;}
公共布尔等于(个人数字其他)
{
返回等于(其他.personalNumber,personalNumber);
}
公共覆盖布尔等于(对象对象对象)
{
if(ReferenceEquals(null,obj))返回false;
if(obj.GetType()!=typeof(PersonalNumber))返回false;
返回等于((个人号码)obj);
}
公共覆盖int GetHashCode()
{
未经检查
{
int result=(rawPersonalNumber!=null?rawPersonalNumber.GetHashCode():0);
结果=(结果*397)^(personalNumber!=null?personalNumber.GetHashCode():0);
结果=(结果*397)^isValid.GetHashCode();
返回结果;
}
}
公共静态布尔运算符==(PersonalNumber左,PersonalNumber右)
{
返回左。等于(右);
}
公共静态布尔运算符!=(PersonalNumber左,PersonalNumber右)
{
返回!左。等于(右);
}
}
还有一些测试

[TestClass]
public class PersonalNumberFixture
{
    [TestMethod]
    public void Ctor_PersonalNumber_AsUnformatted()
    {
        AssertExpectedNumber("7102240475", "7102240475");
        AssertExpectedNumber("197102240475", "7102240475");
        AssertExpectedNumber("19710224-0475", "7102240475");
        AssertExpectedNumber("710224-0475", "7102240475");
    }

    private static void AssertExpectedNumber(string number, string expectedNumber)
    {
        Assert.AreEqual(expectedNumber, new PersonalNumber(number).Number);
    }

    [TestMethod]
    public void FiltersAndRemovesPlusAndMinusCharactersCorrectly()
    {
        Assert.AreEqual("7102240475", new PersonalNumber("710224-0475").Number);
        Assert.AreEqual("7102240475", new PersonalNumber("710224+0475").Number);

        Assert.AreEqual("7102240475", new PersonalNumber("19710224-0475").Number);
        Assert.AreEqual("7102240475", new PersonalNumber("19710224+0475").Number);
    }

    [TestMethod]
    public void PlusAndMinusCharactersOnlyAllowedInCertainPositions()
    {
        Assert.IsTrue(new PersonalNumber("710224-0475").IsValid);
        Assert.IsTrue(new PersonalNumber("710224+0475").IsValid);
        Assert.IsFalse(new PersonalNumber("71022404-75").IsValid);
        Assert.IsFalse(new PersonalNumber("71022404+75").IsValid);
        Assert.IsFalse(new PersonalNumber("710-224-0475").IsValid);
        Assert.IsFalse(new PersonalNumber("710224+04+75").IsValid);
    }

    [TestMethod]
    public void MaleAndFemale_CorrectlyIdentified()
    {
        // female
        Assert.IsFalse(new PersonalNumber("551213-7986").IsMale);
        Assert.IsTrue(new PersonalNumber("551213-7986").IsFemale);

        // male
        Assert.IsTrue(new PersonalNumber("710224-0475").IsMale);
        Assert.IsFalse(new PersonalNumber("710224-0475").IsFemale);
        Assert.IsTrue(new PersonalNumber("19710224-0475").IsMale);
        Assert.IsFalse(new PersonalNumber("19710224-0475").IsFemale);
    }

    [TestMethod]
    public void Ctor_ValidPersonalNumbers_ParsedAsValid()
    {
        TestLoop_ValidPersonalNumbers(new[] { "7102240475", "197102240475", "19710224-0475", "710224-0475", "801231+3535", "630215" });
    }

    private static void TestLoop_ValidPersonalNumbers(IEnumerable<string> personalNumbers)
    {
        foreach (var personalNumber in personalNumbers)
        {
            var pn = new PersonalNumber(personalNumber);

            Assert.IsTrue(pn.IsValid, string.Format("Pno = '{0}'", personalNumber));
        }
    }

    [TestMethod]
    public void ToString_EqualsNormalizedNumber()
    {
        Assert.AreEqual(new PersonalNumber("460126").ToString(), new PersonalNumber("460126").Number);
    }

    [TestMethod]
    public void Ctor_InvalidPersonalNumbers_ParsedAsNotValid()
    {
        TestLoop_InvalidPersonalNumbers(new[] { "127102240475", "19710XY40475", "19710224=0475", "1971", "14532436-45", "556194-7986", "262000-0113", "460531-12" });
    }

    private static void TestLoop_InvalidPersonalNumbers(IEnumerable<string> personalNumbers)
    {
        foreach (var personalNumber in personalNumbers)
        {
            var pn = new PersonalNumber(personalNumber);

            Assert.IsFalse(pn.IsValid, string.Format("Pno = '{0}'", personalNumber));
        }
    }

    [TestMethod]
    public void TwoNumbers_ConsideredEqual_IfNormalizedNumbersAreEqual()
    {
        new PersonalNumber("710224-0475");
        Assert.IsTrue(new PersonalNumber("800212").Equals(new PersonalNumber("19800212")));
        Assert.IsTrue(new PersonalNumber("800212").Equals(new PersonalNumber("800212")));
        Assert.IsTrue(new PersonalNumber("8002121234").Equals(new PersonalNumber("19800212-1234")));

        Assert.IsFalse(new PersonalNumber("800212").Equals(new PersonalNumber("900212")));
    }

    [TestMethod]
    public void EqualsOperatorOverloaded_AsEquals()
    {
        Assert.IsTrue(new PersonalNumber("800212") == new PersonalNumber("19800212"));
        Assert.IsTrue(new PersonalNumber("800212") == new PersonalNumber("800212"));
        Assert.IsTrue(new PersonalNumber("8002121234") == new PersonalNumber("19800212-1234"));

        Assert.IsTrue(new PersonalNumber("800212") != new PersonalNumber("900212"));
    }

    [TestMethod]
    public void IsPlus100YearsOld()
    {
        Assert.IsFalse(new PersonalNumber("800213").IsPlus100YearsOld);
        Assert.IsFalse(new PersonalNumber("800213-0123").IsPlus100YearsOld);

        Assert.IsTrue(new PersonalNumber("800213+0123").IsPlus100YearsOld);
    }
}
[TestClass]
公共类PersonalNumberFixture
{
[测试方法]
公共无效字符\u个人号码\u a信息()
{
资产预期编号(“7102240475”、“7102240475”);
资产预期编号(“197102240475”、“7102240475”);
资产预期编号(“19710224-0475”、“7102240475”);
资产预期编号(“710224-0475”、“7102240475”);
}
私有静态void AssertExpectedNumber(字符串编号,字符串expectedNumber)
{
Assert.AreEqual(expectedNumber、new PersonalNumber(number).number);
}
[测试方法]
public void filters和movesplus与minumcharacters直接()
{
Assert.AreEqual(“7102240475”,新的个人号码(“710224-0475”)。号码);
Assert.AreEqual(“7102240475”,新的个人号码(“710224+0475”)。号码);
Assert.AreEqual(“7102240475”,新的个人号码(“19710224-0475”)。号码);
Assert.AreEqual(“7102240475”,新的个人号码(“19710224+0475”)。号码);
/// <summary>
/// Immutable value type for storing personal numbers
/// </summary>
public struct PersonalNumber : IEquatable<PersonalNumber>
{
    private const string YearHundredOpt = @"(19|20)?"; // 19 or 20 only (optional)
    private const string YearDecade = @"(\d{2})"; // any two digits
    private const string Month = @"(0[1-9]|10|11|12)"; // 01 to 12
    private const string Day = @"(0[1-9]|1\d|2\d|30|31)"; // 01 to 31
    private const string SeparatorAndLastFourOpt = @"([-\+]?)(\d{4})?"; // optional - or + followed by any four digits (optional)

    private const string RegExForValidation =
        "^" + YearHundredOpt + YearDecade + Month + Day + SeparatorAndLastFourOpt + "$";

    private static readonly Regex personNoRegex = new Regex(RegExForValidation, RegexOptions.Compiled);

    private readonly string rawPersonalNumber;
    private readonly string personalNumber;
    private readonly bool isValid;
    private readonly bool isPlus100YearsOld;

    public PersonalNumber(string personalNumber)
    {
        rawPersonalNumber = personalNumber;

        var matches = personNoRegex.Matches(personalNumber);
        var normalizedYYMMDDXXXC = string.Empty;
        isPlus100YearsOld = false;
        foreach (Match match in matches)
        {
            if (match.Success)
            {
                normalizedYYMMDDXXXC = match.Groups[2].Value + match.Groups[3].Value +
                              match.Groups[4].Value + match.Groups[6].Value;
                if (match.Groups[5].Success)
                {
                    isPlus100YearsOld = match.Groups[5].Value == "+";
                }
                break;
            }
        }

        if (normalizedYYMMDDXXXC.Length > 6)
        {
            isValid = personNoRegex.IsMatch(personalNumber) && LuhnAlgorithm.ValidateChecksum(normalizedYYMMDDXXXC);
        }
        else
        {
            isValid = personNoRegex.IsMatch(personalNumber);
        }

        this.personalNumber = string.IsNullOrEmpty(normalizedYYMMDDXXXC) ? rawPersonalNumber : normalizedYYMMDDXXXC;
    }

    public string Number { get { return personalNumber; } }
    public bool IsPlus100YearsOld { get { return isPlus100YearsOld; } }
    public bool IsValid { get { return isValid; } }
    public bool IsMale { get { return !IsFemale; } }

    public bool IsFemale
    {
        get
        {
            var genderCharacter = personalNumber.Substring(personalNumber.Length - 2, 1); // second to last character
            return int.Parse(genderCharacter) % 2 == 0; // even = female, odd = male
        }
    }

    public override string ToString() { return Number; }

    public bool Equals(PersonalNumber other)
    {
        return Equals(other.personalNumber, personalNumber);
    }

    public override bool Equals(object obj)
    {
        if (ReferenceEquals(null, obj)) return false;
        if (obj.GetType() != typeof (PersonalNumber)) return false;
        return Equals((PersonalNumber) obj);
    }

    public override int GetHashCode()
    {
        unchecked
        {
            int result = (rawPersonalNumber != null ? rawPersonalNumber.GetHashCode() : 0);
            result = (result*397) ^ (personalNumber != null ? personalNumber.GetHashCode() : 0);
            result = (result*397) ^ isValid.GetHashCode();
            return result;
        }
    }

    public static bool operator ==(PersonalNumber left, PersonalNumber right)
    {
        return left.Equals(right);
    }

    public static bool operator !=(PersonalNumber left, PersonalNumber right)
    {
        return !left.Equals(right);
    }
}
[TestClass]
public class PersonalNumberFixture
{
    [TestMethod]
    public void Ctor_PersonalNumber_AsUnformatted()
    {
        AssertExpectedNumber("7102240475", "7102240475");
        AssertExpectedNumber("197102240475", "7102240475");
        AssertExpectedNumber("19710224-0475", "7102240475");
        AssertExpectedNumber("710224-0475", "7102240475");
    }

    private static void AssertExpectedNumber(string number, string expectedNumber)
    {
        Assert.AreEqual(expectedNumber, new PersonalNumber(number).Number);
    }

    [TestMethod]
    public void FiltersAndRemovesPlusAndMinusCharactersCorrectly()
    {
        Assert.AreEqual("7102240475", new PersonalNumber("710224-0475").Number);
        Assert.AreEqual("7102240475", new PersonalNumber("710224+0475").Number);

        Assert.AreEqual("7102240475", new PersonalNumber("19710224-0475").Number);
        Assert.AreEqual("7102240475", new PersonalNumber("19710224+0475").Number);
    }

    [TestMethod]
    public void PlusAndMinusCharactersOnlyAllowedInCertainPositions()
    {
        Assert.IsTrue(new PersonalNumber("710224-0475").IsValid);
        Assert.IsTrue(new PersonalNumber("710224+0475").IsValid);
        Assert.IsFalse(new PersonalNumber("71022404-75").IsValid);
        Assert.IsFalse(new PersonalNumber("71022404+75").IsValid);
        Assert.IsFalse(new PersonalNumber("710-224-0475").IsValid);
        Assert.IsFalse(new PersonalNumber("710224+04+75").IsValid);
    }

    [TestMethod]
    public void MaleAndFemale_CorrectlyIdentified()
    {
        // female
        Assert.IsFalse(new PersonalNumber("551213-7986").IsMale);
        Assert.IsTrue(new PersonalNumber("551213-7986").IsFemale);

        // male
        Assert.IsTrue(new PersonalNumber("710224-0475").IsMale);
        Assert.IsFalse(new PersonalNumber("710224-0475").IsFemale);
        Assert.IsTrue(new PersonalNumber("19710224-0475").IsMale);
        Assert.IsFalse(new PersonalNumber("19710224-0475").IsFemale);
    }

    [TestMethod]
    public void Ctor_ValidPersonalNumbers_ParsedAsValid()
    {
        TestLoop_ValidPersonalNumbers(new[] { "7102240475", "197102240475", "19710224-0475", "710224-0475", "801231+3535", "630215" });
    }

    private static void TestLoop_ValidPersonalNumbers(IEnumerable<string> personalNumbers)
    {
        foreach (var personalNumber in personalNumbers)
        {
            var pn = new PersonalNumber(personalNumber);

            Assert.IsTrue(pn.IsValid, string.Format("Pno = '{0}'", personalNumber));
        }
    }

    [TestMethod]
    public void ToString_EqualsNormalizedNumber()
    {
        Assert.AreEqual(new PersonalNumber("460126").ToString(), new PersonalNumber("460126").Number);
    }

    [TestMethod]
    public void Ctor_InvalidPersonalNumbers_ParsedAsNotValid()
    {
        TestLoop_InvalidPersonalNumbers(new[] { "127102240475", "19710XY40475", "19710224=0475", "1971", "14532436-45", "556194-7986", "262000-0113", "460531-12" });
    }

    private static void TestLoop_InvalidPersonalNumbers(IEnumerable<string> personalNumbers)
    {
        foreach (var personalNumber in personalNumbers)
        {
            var pn = new PersonalNumber(personalNumber);

            Assert.IsFalse(pn.IsValid, string.Format("Pno = '{0}'", personalNumber));
        }
    }

    [TestMethod]
    public void TwoNumbers_ConsideredEqual_IfNormalizedNumbersAreEqual()
    {
        new PersonalNumber("710224-0475");
        Assert.IsTrue(new PersonalNumber("800212").Equals(new PersonalNumber("19800212")));
        Assert.IsTrue(new PersonalNumber("800212").Equals(new PersonalNumber("800212")));
        Assert.IsTrue(new PersonalNumber("8002121234").Equals(new PersonalNumber("19800212-1234")));

        Assert.IsFalse(new PersonalNumber("800212").Equals(new PersonalNumber("900212")));
    }

    [TestMethod]
    public void EqualsOperatorOverloaded_AsEquals()
    {
        Assert.IsTrue(new PersonalNumber("800212") == new PersonalNumber("19800212"));
        Assert.IsTrue(new PersonalNumber("800212") == new PersonalNumber("800212"));
        Assert.IsTrue(new PersonalNumber("8002121234") == new PersonalNumber("19800212-1234"));

        Assert.IsTrue(new PersonalNumber("800212") != new PersonalNumber("900212"));
    }

    [TestMethod]
    public void IsPlus100YearsOld()
    {
        Assert.IsFalse(new PersonalNumber("800213").IsPlus100YearsOld);
        Assert.IsFalse(new PersonalNumber("800213-0123").IsPlus100YearsOld);

        Assert.IsTrue(new PersonalNumber("800213+0123").IsPlus100YearsOld);
    }
}