随着2012年MX报文的启用,公司部业务类报文也要求从MT转MX进行报文传递。奈何我英语一向不好,只能想法子变通的方式理解转换规则,此处我仅列出我理解的MX函数与Java语言中函数是如何类比理解的,若有偏差还望给位刷到该篇博文的大佬能够在留言区与我一起交流。
SWIFT即Society for Wirldwide Interbank Financial Telecommunications 是环球同业银行金融电讯协会的简称,主要只能是在群求银行系统直接传递结算信息。博主的理解是电讯二字应理解为通讯,那么SWIFT即可理解为通讯平台,类似于微信和QQ,制定相应的通讯规范,那么SWIFT也是为国际电报文制定相应的通讯规范的一种特殊网络环境下的一种通讯工具。
SWIFT MX 即SWIFT XML格式的电讯报文。
函数名称 | String的方法 | 函数描述 | 示例 |
---|---|---|---|
AppendTo (Value, Target) | tager.concat(String str) | 将value追加到tager后面 | AppendTo (“123”, “456”) return "456123 " |
AppendToNextLine (Value, Target) | (value+tager).toString() | 将value追加在tager前 | AppendTo (“123”, “456”) return “123456” |
ReturnFirstLineEmpty(Target,n) | 无 | 返回为空的那行的行标 | ReturnFirstLineEmpty(Target,n) 若n为3,第2行为空则返回2 |
Concatenate (Value1, Value2, Value3, … ValueN) | (Value1, Value2, Value3, … ValueN) .toString() | 将 Value1, Value2, Value3, … ValueN拼接成一个字符串 | Concatenate (“1”,“2”, “3”, “n”) return 123n |
Copy [(Value)] | 无 | 将值的属性或者路径复制到对应目录 | Copy [(boolean a)] 若a=false 则return false |
DecimalSignificantDigits (Value) | 无 | 将小数点后的有效小数转为十进制数字 | DecimalSignificantDigits (“123.4560000”) return 456 |
DeleteChar (Value, FromPosition, ToPosition) | 无 | 删除FromPosition 和ToPsition之间的值 | DeleteChar (“2”,“123”, “324”) return 14 |
DeletePattern (Value, Pattern) | 无 | 删除制定的元素 | DeletePattern (“2”, “123”) return 13 |
EqualTo (also used “=”) | equals(String str) | 检查两个值是否相等 | |
EquivalentCode (Value, SourceCodeList, TargetCodeList) | contains(CharSequence str) | 字符串或列表中是否包含value如果包含则返回TargetCodeList 如果不包含则返回null | 若EquivalentCode (“2”, “123”, “234”) return 234 ,若EquivalentCode (“2”, “143”, “234”) return null |
ExtractBetweenPattern (Value, FromPattern, {ToPattern1, ToPattern2, … ToPatternN}) | 无 | 截取链表中FromPattem到Value之间的值 | ExtractBetweenPattern (“1”, “2”, {“2341”, “13452”, “234”}) return {“34”,“345”,“”} |
ExtractFromPattern (Value, [FromPosition], FromPattern) | str.substring(begin + 2, last) | 如果字符串中包含一个FromPosition 就返回FromPosition如果包含多个FromPosition则返回第一个FromPosition到最后一个FromPosition之间的值 | 若 ExtractFromPattern (“234”, [“2”], “2345”) return 2345 若ExtractFromPattern (“23452”, [“2”], “2345”) return 345 |
ExtractLines (Value, FromPattern, [ContinuationPattern]) | String str1 = str.substring(0, str.indexOf(“_”)); String str2 = str.substring(str1.length()+1, str.length()); | 截取字符FromPattern之后的值且字符长度不可超过35若少于35则用ContinuationPattern替换,若超过35则截取为换行符,或找不到FromPattern这个值则返回null | 若ExtractLines (“22222123222222 33”, “2”, [“3”]) return 222212322222 3 若ExtractLines (“22222123222222 3323”, “2”, [“3”]) return 2222123222222 3 若ExtractLines (“22222123222222333”, “4”, [“3”]) return null |
ExtractLinesAsIs(Value, FromPattern, [ContinuationPattern]) | String str1 = str.substring(0, str.indexOf(“_”)); String str2 = str.substring(str1.length()+1.trim(), str.length()) | 截取字符FromPattern之后的值且字符长度不可超过35若少于35则用ContinuationPattern替换,若超过35则截取为换行符,或找不到FromPattern这个值则返回null 与ExtractLines 不同的是超出换行符的值不能直接替换为空 | 若ExtractLinesAsIs(“22222123222222 33”, “2”, [“3”]) return 2222123222223 若ExtractLinesAsIs(“22222123222222 3323”, “2”, [“3”]) return 22221232222223 若ExtractLinesAsIs(“22222123222222333”, “4”, [“3”]) return null |
ExtractPattern (Value, Pattern) | int strStartIndex = str.indexOf("U”);int strEndIndex = str.indexOf(“D”);String result = str.substring(strStartIndex, strEndIndex).substring(strStart.length()); | 返回Pattern在value第一次出现的值 | 若ExtractPattern(“USD1500”, “USD”) |
ExtractTillPattern (Value, [FromPosition], TillPattern) | String str = “ABC/DEF/GHI”; String str1 = str.substring(0, str.indexOf(“/”)); | 在源值中提取一个字符串,直到TillPattern。如果(可选)FromPosition存在,那么该函数将返回从FromPosition开始的源值中的字符串,直到TillPattern。 | 若ExtractTillPattern(ABC/DEF/GHI, “/”)返回字符串ABC 若ExtractTillPattern(ABC/DEF/GHI, 5, “/”)返回字符串DEF返回的字符串不包括TillPattern。 |
DeleteExtractLines(Value, FromPattern, [ContinuationPattern]) | 无 | 从Value中删除使用ExtractLines函数提取的信息 | 若DeleteExtractLines(“22222123222222 3323”, “22222123222222 3323456”, [ExtractLines (“22222123222222 3323”, “2”, [“3”]) ]) return 23456 |
DeleteLine(Element,LineNumber) | 无 | 在多行元素中,使用LineNumber删除行,并返回删除行并由下一行替换的元素(如果有的话)。 | 若 DeleteLine(“1223”,1) return null |
FirstOccurrenceOf (Element) | indexOf(String str) | 返回可能多次出现的元素的第一次出现。 | 若 FirstOccurrenceOf (“123”) return 1 |
GreaterEqualTo (also used “≥”) | “≥” | 运算符大于等于 | 2 GreaterEqualTo 3 return false |
GreaterThan (also used “>”) | “>” | 运算符大于 | 4 GreaterThan 3 return true |
Ignore | 无 | 忽略意味着没有对语义单位的翻译。 | 忽略不转换 |
IsAbsent (Value) | 无 | 检查源值是否缺失或为空。它返回一个布尔值(True或False)。 | 无 |
IsAbsentPattern (Value, Pattern) | to_date() | 检查时间格式是否符合,或者规定的格式是否匹配 | 若IsAbsentPattern(DateTime, “HH:MM:SS.”) return true 若 IsAbsentPattern(DateTime, "T"HH:MM:SS) return false |
IsAccount(Value) | 无 | 检查格式是否为账号格式 若value以/CH开头或不以/开头则返回真反之返回假 | 若 IsAccount(“/CH85588”) return ture |
IsAlphabetic (Value) | isAlphabetic() | 检查源值的所有字符是否为字母 | 若 IsAlphabetic (“123”) return false |
IsAlphabeticOrNumeric (Value) | AlphanumericExample | 检查源值得所有字符是否为数字或字母 | 若IsAlphabeticOrNumeric (“123456www_”) return false |
IsBEI (Value) | 无 | 检查源值是否为有效的BEI | 无 |
IsBIC (Value) | 无 | 检查源值是否为有效的BIC | 每个银行的BIC不一样,是有效BIC则返回true 反之则返回false |
IsCountryCode (Value) | 无 | 检查源值是否为有效的国家代码 | 每个国家的code不一样,是有效CoutryCode则返回true 反之则返回false |
IsEmpty (Value) | IsEmpty () | 检查源值是否为空 | 源值为空则返回ture |
IsIBAN (Value) | 无 | 检查源值是否为有效的IBAN (根据ISO标准3166) | 无 |
IsPresent (Element) | IsNotEmpty () | 检查元素是否存在且非空。 | 无 |
IsPresentPattern (Value, Pattern) | contains(CharSequence s); | 检查模式是否存在于源值中 | 若 IsPresentPattern(“2007-12-08T23:12:01”, “T”) return ture |
Length (Value ) | Length () | 返回源值的长度 | Length (“123456”) return 6 |
LessEqualTo (also used “≤”) | “≤” | 运算符小于等于 | 2 LessEqualTo 3 return true |
LessThan (also used “<”) | “<” | 运算符小于 | 2 LessThan 3 return true |
NumberOfOccurrences (Element) | 无 | 返回源元素的出现次数 | 无 |
OccurrenceOf (Element) | 无 | 返回可以是复杂结构的指定重复源元素的出现号(出现位置) | 无 |
PadLeft (Value, Character, Length) | 无 | 在获取到指定长度的值之前,返回用指定字符向左侧填充值之后的结果。如果值的长度大于或等于指定的长度,则不添加填充字符。 | 若PadLeft (“123456”, “4”, “1”)return 12 |
ReplacePattern (Value, Pattern1, Pattern2) | str.replaceAll( Pattern1, Pattern2); | 将源值中的Pattern1替换为Pattern2后返回结果 | 若 ReplacePattern (“123456”, “2”, “6”) return 163456 |
SecondOccurrenceOf (Element) | 无 | 返回元素的第二个匹配项,该元素可能有多个匹配项。 | 无 |
SignificantDigits (Value) | 无 | 返回源值(十进制)中的有效位数 | 若SignificantDigits (“0120.4560000”) return 6 解析:有效十进制为120.456 |
SplitInLines (Value, NumberOf Characters, [ContinuationPattern]) | split(Stringregex) | 按指定字符数的行拆分源值的结果。如果源值拆分为多行,则该函数会添加回车换行符(CRLF),用于在MT字段中分隔连续行,每行末尾有多行,最后一行除外。在源值拆分为多行的相同情况下,可选的ContinuationPattern(如果存在)将写入第一行之后每行的开头。 | 无 |
StartWith (“Value”) | 无 | 检查函数左边的值是否以模式开始 | 无 |
Stop translation | 无 | 停止翻译 | 无 |
Substring (Value, From Position, [Length]) | substring(FromPosition,length) | 返回截取的字符串 | Substring (“123456”, “3”, [2]) return 45 |
SumOfOccurrences (Element) | 无 | 返回所有元素源值的和 | SumOfOccurrences (“123”) return 6 |
TrimLeft (Value, Character) | 无 | 从值的最左边开始删除指定字符后的结果,直到遇到与字符参数不同的字符为止。 | 若TrimLeft (“1234”, “3”) return 12 |
TrimRight (Value, Character) | 无 | 删除指定字符后的结果,从值的最右侧开始,直到遇到与字符参数不同的字符为止。 | 若TrimRight (“1234”, “3”) return 34 |
Truncate(Value, Position ) | 无 | 返回位置参数之后的源值截断后的结果 | 若Truncate(“123456”, 3) return 3456 |
WithinList (Value, CodeList) | 无 | 检查源代码值是否存在于代码列表中 | 无 |
每个MX函数都需要结合相应的注释去理解,如有偏差还望大佬们再评论区帮忙指正,祝愿各位大佬转换报文时都能顺风顺水。