diff --git a/src/libfintx.Sepa/Helper/SepaHelper.cs b/src/libfintx.Sepa/Helper/SepaHelper.cs
new file mode 100644
index 0000000..58754ad
--- /dev/null
+++ b/src/libfintx.Sepa/Helper/SepaHelper.cs
@@ -0,0 +1,50 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Security;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Xml;
+
+namespace libfintx.Sepa.Helper
+{
+ public static class SepaHelper
+ {
+ public static string Escape(string str)
+ {
+ // Zunächst XML-escapen
+ var escaped = SecurityElement.Escape(str);
+ // Dann sicherstellen, dass nur gemäß SEPA gültige Zeichen verwendet werden
+ return ConvertToValidSepaString(escaped);
+ }
+
+ public static string ConvertToValidSepaString(string str)
+ {
+ return new string(str.Select(c => ConvertToValidSepaString(c)).SelectMany(s => s).ToArray());
+ }
+
+ ///
+ /// Hier findet kein XML-Escaping statt, sondern es wird sichergestellt, dass nur die in SEPA gültigen Zeichen verwendet werden.
+ ///
+ ///
+ ///
+ private static string ConvertToValidSepaString(char c)
+ {
+ switch (c)
+ {
+ case 'Ä': return "Ae";
+ case 'Ö': return "Oe";
+ case 'Ü': return "Ue";
+ case 'ä': return "ae";
+ case 'ö': return "oe";
+ case 'ü': return "ue";
+ case 'ß': return "ss";
+ }
+
+ if (!Regex.Match($"{c}", @"^[\sa-zA-Z0-9/?:\(\)\.,'+-]$").Success)
+ return string.Empty;
+
+ return $"{c}";
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/libfintx.Sepa/Pain/pain00100203.cs b/src/libfintx.Sepa/Pain/pain00100203.cs
index 23a7e3b..f646953 100644
--- a/src/libfintx.Sepa/Pain/pain00100203.cs
+++ b/src/libfintx.Sepa/Pain/pain00100203.cs
@@ -25,6 +25,7 @@
using System.Collections.Generic;
using System.Security;
using libfintx.Globals;
+using libfintx.Sepa.Helper;
namespace libfintx.Sepa
{
@@ -52,9 +53,9 @@ public static string Create(string Accountholder, string AccountholderIBAN, stri
var Amount_ = Amount.ToString().Replace(",", ".");
- var Accountholder_ = SecurityElement.Escape(Accountholder);
- var Receiver_ = SecurityElement.Escape(Receiver);
- var Usage_ = SecurityElement.Escape(Usage);
+ var Accountholder_ = SepaHelper.Escape(Accountholder);
+ var Receiver_ = SepaHelper.Escape(Receiver);
+ var Usage_ = SepaHelper.Escape(Usage);
string Message = "" +
"" +
diff --git a/src/libfintx.Sepa/Pain/pain00100303.cs b/src/libfintx.Sepa/Pain/pain00100303.cs
index 8e70053..ee53c09 100644
--- a/src/libfintx.Sepa/Pain/pain00100303.cs
+++ b/src/libfintx.Sepa/Pain/pain00100303.cs
@@ -25,6 +25,7 @@
using System.Collections.Generic;
using System.Security;
using libfintx.Globals;
+using libfintx.Sepa.Helper;
namespace libfintx.Sepa
{
@@ -53,9 +54,9 @@ public static string Create(string Accountholder, string AccountholderIBAN, stri
var Amount_ = Amount.ToString().Replace(",", ".");
- var Accountholder_ = SecurityElement.Escape(Accountholder);
- var Receiver_ = SecurityElement.Escape(Receiver);
- var Usage_ = SecurityElement.Escape(Usage);
+ var Accountholder_ = SepaHelper.Escape(Accountholder);
+ var Receiver_ = SepaHelper.Escape(Receiver);
+ var Usage_ = SepaHelper.Escape(Usage);
string Message = "" +
"" +
diff --git a/src/libfintx.Sepa/Pain/pain00800202.cs b/src/libfintx.Sepa/Pain/pain00800202.cs
index b39032b..fdfb2ef 100644
--- a/src/libfintx.Sepa/Pain/pain00800202.cs
+++ b/src/libfintx.Sepa/Pain/pain00800202.cs
@@ -25,6 +25,7 @@
using System.Collections.Generic;
using System.Security;
using libfintx.Globals;
+using libfintx.Sepa.Helper;
namespace libfintx.Sepa
{
@@ -63,9 +64,9 @@ public static string Create(string Accountholder, string AccountholderIBAN, stri
var Amount_ = Amount.ToString().Replace(",", ".");
- var Accountholder_ = SecurityElement.Escape(Accountholder);
- var Payer_ = SecurityElement.Escape(Payer);
- var Usage_ = SecurityElement.Escape(Usage);
+ var Accountholder_ = SepaHelper.Escape(Accountholder);
+ var Payer_ = SepaHelper.Escape(Payer);
+ var Usage_ = SepaHelper.Escape(Usage);
string Message = "" +
"" +
diff --git a/src/libfintx.Sepa/libfintx.Sepa.csproj b/src/libfintx.Sepa/libfintx.Sepa.csproj
index 7bcb7d8..48e2b92 100644
--- a/src/libfintx.Sepa/libfintx.Sepa.csproj
+++ b/src/libfintx.Sepa/libfintx.Sepa.csproj
@@ -8,10 +8,16 @@
+
+
+
Designer
+
+
+
diff --git a/src/libfintx.Tests/Pain/pain00100103Tests.cs b/src/libfintx.Tests/Pain/pain00100103Tests.cs
index 0b1b1f9..08472a8 100644
--- a/src/libfintx.Tests/Pain/pain00100103Tests.cs
+++ b/src/libfintx.Tests/Pain/pain00100103Tests.cs
@@ -3,11 +3,26 @@
using libfintx.FinTS;
using System.Collections.Generic;
using libfintx.Sepa;
+using System.Reflection;
+using System.IO;
+using System.Text.RegularExpressions;
+using libfintx.Sepa.Helper;
+
namespace libfintx.Tests.Pain
{
public class pain00100103Tests
{
+ [Fact]
+ public void Test_Escape()
+ {
+ string str = SepaHelper.Escape(@"Hübner;;;\\\");
+ Assert.Equal("Huebner", str);
+
+ str = SepaHelper.Escape(@"Der Verwendungszweck der Überweisung ####ist die Mietzahlung.");
+ Assert.Equal("Der Verwendungszweck der Ueberweisung ist die Mietzahlung.", str);
+ }
+
[Fact(Skip = "You have to set the Arrange variables for this test")]
public void Create_StateUnderTest_ExpectedBehavior()
{