首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenISO8583.Net 8583.Net BCD格式的第2轨

OpenISO8583.Net 8583.Net BCD格式的第2轨
EN

Stack Overflow用户
提问于 2012-05-07 16:20:11
回答 2查看 2.4K关注 0票数 1

这是另一个问题。

我对轨道2 (bit 35)的要求是:

Z(数字+X 'D‘( BCD,D 1101的半字节表示为主帐户号和终止日期之间的字段分隔符),BCD-当奇数位数时,将最多半字节包装为'0’。大小:变量为37,前面有一个字节的BCD长度指示符。

默认的模板定义有35位,作为一个2字节长的Ascii字段,所以我确信这不是它。我把它改成了BcdVar(1,37,Formatters.Bcd)。

以一个虚拟的track2为例:

12345678901234567=9999999999999999999

我将'=‘分隔符替换为0x0D整数值,该值转换为"13“(1101)。我们现在有:

1234567890123451399999999999999999

这有道理吗?我不认为这是正确的做法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-08 07:49:04

您已经遇到了OpenIso8583.Net的“特性”。使用msg[3] = "123456"处理字段值时,必须始终处理未打包的值。

对于这个track2数据,您需要将轨道2构建为12345678901234567D9999999999999999999。注意数据中间的'D‘作为分隔符。

现在,在您的Template设置字段35中,本质上有一个BCD格式化程序。

代码语言:javascript
复制
template[Bit._035_TRACK_2_DATA] = FieldDescriptor.BcdVar(2, 37, FieldValidators.Track2)
票数 0
EN

Stack Overflow用户

发布于 2013-11-24 05:17:56

我有点重复了这个问题(Track2 in BCD - 'D' character)。

将字段处理为二进制(与BCD长度指示符!)是一个可爱的技巧,这可能会做到这一点。但是,仍然没有任何方法:

代码语言:javascript
复制
  public static FieldDescriptor.BinaryVar(..., ILengthFormatter lengthFormatter)

因此,不需要添加它(无论如何,对于BinaryVar字段来说,应该这样做),我们可以添加一个:

代码语言:javascript
复制
  public static FieldDescriptor.BcdVar(..., IFieldValidator validator)

然后打电话:

代码语言:javascript
复制
  msg[Bit._035_TRACK_2_DATA] = FieldDescriptor.BcdVar(2, 37, FieldValidators.Track2);

“D”将被视为BCD -银行知道什么.

关于的右填充,我想这就是调节器的用处所在。同样,我们需要添加一个带有调整器参数的静态方法,如下所示:

代码语言:javascript
复制
  var setAdjuster = new LambdaAdjuster(setLambda: value => value.PadRight(value.length + 1, '0'));

这是真的--你可以在设置字段之前先设置值,但这并不有趣(我们是极客,不是吗?)

关于向FieldDescriptor添加静态方法--我想可以使用泛型

代码语言:javascript
复制
  public static IFieldDescriptor Create(ILengthFormatter lengthFormatter, IFieldValidator fieldValidator, IFormatter formatter, Adjuster adjuster)

但是我是C#的新手,我很乐意得到关于我的理论的证实。

谢谢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10485533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档