??xml version="1.0" encoding="utf-8" standalone="yes"?>91久久精品国产91久久性色,国产一区二区0,久久国内精品视频http://www.aygfsteel.com/anselly/zh-cnThu, 19 Jun 2025 00:19:09 GMTThu, 19 Jun 2025 00:19:09 GMT608583http://www.aygfsteel.com/anselly/archive/2011/06/02/351624.htmlansellyansellyThu, 02 Jun 2011 10:39:00 GMThttp://www.aygfsteel.com/anselly/archive/2011/06/02/351624.htmlhttp://www.aygfsteel.com/anselly/comments/351624.htmlhttp://www.aygfsteel.com/anselly/archive/2011/06/02/351624.html#Feedback0http://www.aygfsteel.com/anselly/comments/commentRss/351624.htmlhttp://www.aygfsteel.com/anselly/services/trackbacks/351624.html最开始时Q金融系l只?span lang="EN-US">IBMq些大的公司来提供设备,象各U主Zl端{。在各个计算备之_需要交换数据。我们知道数据是通过|络来传送的Q而在|络上传送的数据都是Z0?span lang="EN-US">1q样的二q制数据Q如果没有对数据q行~码Q则q些数据没有够理解,属于没有用的数据。v初的X.25?span lang="EN-US">SDLC以及现在行?span lang="EN-US">TCP/IP|络协议都提供底层的通讯~码协议Q它们解决了最底层的通讯问题Q能够将一串字W从一个地方传送到另一个地斏V但是,仅仅传送字W串是没有太大意义的Q怎样来解析字W串代表什么内Ҏ非常重要的,否则传送一?#8220;0123abcd”的字W串也是无用的ؕ码?span lang="EN-US">

    让我们随着时光回到几十q前的某个时刻,假设我们被推到历史的舞台上,由我们来设计一个通用报文协议Q来解决金融pȝ之间的报文交换,暂且U该协议叫做ISO8583协议。此Ӟ技术是在不断的前行Q当?span lang="EN-US">IBM一支独U的局面好像已l不妙了Q各U大不一的公叔Rq入金融行业以求能有所斩获Q呈一片百花齐攄局面。我们怎样来设计一个报文协议,能够这些如雨后春笋般出现的所有公叔RU_q来Q其实也不是一件很单的事?span lang="EN-US">

    我们q是先一步步的来考虑吧。金融行业其实涉及到的数据内容ƈ不是成千上万Q无法统计,恰恰相反Q是比较的。我们都可以在心底数得过来,象交易类型、帐受帐L型、密码、交易金额、交易手l费、日期时间、商户代码?span lang="EN-US">2?span lang="EN-US">3数据、交易序列号{,把所有能够ȝ出来的都ȝh不过100个左右的数据。那我们可以首先单的设计ISO8583Q定?span lang="EN-US">128个字D,所有能够考虑到的cM上面提到?#8220;帐号”{金融数据类型,按照一个顺序排hQ分别对?span lang="EN-US">128个字D中的一个字Dc每个数据类型占固定的长度,q个序和长度我们都事先定义好。这样就单了Q要发送一个报文时Q就?span lang="EN-US">128个字D|照顺序接hQ然后将接v来的整串数据包发送出厅R?span lang="EN-US">

    M金融软g收到ISO8583包后Q直接按照我们定义的规范解包卛_Q因为整个报文的128个字D从哪一位到哪一位代表什么,大家都知道,只要知道你的数据包是ISO8583包即可,我们都已l定义好了。比如第1个字D|“交易cd”Q长度ؓ4位,W?span lang="EN-US">2个字D位?#8220;帐号”Qؓ19位等{。接收方可以先?span lang="EN-US">4位,再取接着?span lang="EN-US">19位,依次cLQ直到整个数据包128个字D都解完为止?span lang="EN-US">

    其实q种做法真是单直接,基本上就可以满需要了。不q我们有几个问题要思考下Q?span lang="EN-US">
1?我怎么知道每个字段的数据类型呢Q是数字q是字符Q?span lang="EN-US">
2?每个传送的报文都把128个字D都传过去,那网l带宽能够承受得了,有时候我可能只需要其?span lang="EN-US">5个字D,l果多收C123个无用的字段?span lang="EN-US">
3?如果我某些字D늚长度不固定,属于变长怎么办,因ؓ你现在解包是当作数据包每个字D都是固定的Q用C语言解包时直接依靠指针取固定长度的一串字W做Z个字Dc?span lang="EN-US">

    我们来一一解决q些问题?span lang="EN-US">

    W一个问题简单,我在定义ISO8583旉了定义每个字D表CZ么,q规定其内容是数字或是字W等卛_。考虑可能出现的类型不q有以下几种Q字母、数字、特D字W、年月日{时间、二q制数据。比如我?span lang="EN-US">128个字D中?#8220;商户cd”字段定义光度是15Q同时定义其cd为字母。再_点,如果“商户cd”里面的数据同时包括数字和字母呢?那我们就定义其类型ؓ字母也可Qؓ数字也可Q即一个字D可以同时属于多个类型?span lang="EN-US">

    W二个问题稍微复杂点。其本质是如果我只?span lang="EN-US">128个字D늚5个字D,接收Ҏ么知道我传了哪几个字段l它了。要是我们把剩下?span lang="EN-US">123全部填成0或其他特D标识,标明该字D不需要用?q种处理Ҏ没有半点用处Q没有解决网l带宽的本质问题Q还是要?span lang="EN-US">128个字Dc?span lang="EN-US">

    换个思\Q我在报文前面加上个包头Q包头里面包含的信息能够让别人知道只传了5个字Dc怎样设计q个包头Q可以这P我们?span lang="EN-US">16个字节,?span lang="EN-US">128?span lang="EN-US">bitQ一个字节等?span lang="EN-US">8bitQ来表示128个字D中的某个字D|否存在。每?span lang="EN-US">bit在计机的二q制里面不是10Q如果是1pC对应的字段在本ơ报文中存在Q如果是0是不存在。这样好了,如果别h接收CISO8583报文Q可以先Ҏ最前面的报文头Q就知道紧接着报文头后面的报文有哪些字D,没有哪些字段了。比如,我要发?span lang="EN-US">5个字D,分别属于128个字D中的第2?span lang="EN-US">3?span lang="EN-US">6?span lang="EN-US">8?span lang="EN-US">9字段Q我可以将128bit的报文头填成011001011000000000………..Q一?span lang="EN-US">128?span lang="EN-US">bitQ后面就全是0了。注意其中第2?span lang="EN-US">3?span lang="EN-US">6?span lang="EN-US">8?span lang="EN-US">9位ؓ1Q其他都?span lang="EN-US">0?span lang="EN-US">

    有了q个128bit的报文头Q我们就可以只发送需要的5个字D了。怎样l织报文Q先放上q?span lang="EN-US">128bitQ即16个字节的_然后在头后面?span lang="EN-US">2?span lang="EN-US">3?span lang="EN-US">6?span lang="EN-US">8?span lang="EN-US">9字段Q这些字D늴挨在一P3?span lang="EN-US">6之间也不需要填?span lang="EN-US">4?span lang="EN-US">5q两个字D了。接收方收到q个报文Q它会根?span lang="EN-US">128bit的报文头来解包,它自然知道把W?span lang="EN-US">3个字D取出后Q就直接在第3字段的后面取W?span lang="EN-US">6个字D,每个字段的长度在ISO8583里面都定义好了,很轻村ְ把数据包解出来了?span lang="EN-US">

    q下好了Qؓ了解决上面的W二问题Q我们只是在报文中增加了16个字节的数据Q就L搞定了,我们把这16个字节称?span lang="EN-US">bit mapQ即位图Q用来表C某个位是否存在。不q我们再E微优化一下,考虑到很多时候报文不需?span lang="EN-US">128个字D这么多Q其一?span lang="EN-US">64个字D都不一定能够用完。那我可以将报文头由128bit减到64bitQ只有在需要的时候才把剩下的64bit攑ֈ报文里面Q这h文长度不又少?span lang="EN-US">8个字节吗Q?span lang="EN-US">

    是个好主意。我们把ISO8583?span lang="EN-US">128个字D中最常见的都攑ֈ?span lang="EN-US">64个字D中Q那我们可以处理羃一倍。这h一般发送报文时只需发?span lang="EN-US">64bitQ即一个字节的报文_再加上需要的几个字段可以了。如果有些报文用?span lang="EN-US">64?span lang="EN-US">128之间的字D呢Q这个也好办Q我?span lang="EN-US">64bit报文头的W一?span lang="EN-US">bit用来代表Ҏ含义Q如果该bit?span lang="EN-US">1Q则表示64bit后面跟了剩下?span lang="EN-US">64bit报文_如果W一?span lang="EN-US">bit?span lang="EN-US">0Q则表示64bit后面没有跟剩下的64bit报文_直接?span lang="EN-US">128个字D中的报文了。那们,接收方会判断一下报头的W一?span lang="EN-US">bit?span lang="EN-US">1q是0Q从而知道报文头?span lang="EN-US">64bitq是128bit了,可以做相应处理。因为报文头W二?span lang="EN-US">64bit属于有时候有Q所以我们叫?span lang="EN-US">Extended bit map扩展位图Q相应的报文头最开始的64bit我们叫它Primary bit mapM图。我们直接把扩展位图固定攑ֈ128个字D늚W一个字D,而主位图每个数据包都有,强制性放在所?span lang="EN-US">128个字D늚前面Qƈ不归?span lang="EN-US">128个字D中厅R?span lang="EN-US">

    W三个问题可以考虑q样解决。比如第2个字D|“帐号”Q是不定长的Q可能有的银行帐h19位,有的?span lang="EN-US">17位等。我们定ISO8583规范时可以规定第2个字D|25位,q下_?span lang="EN-US">19?span lang="EN-US">17的情况都包含q来Q但是如果以后出C30位的怎么办?那我们现在将字段定ؓ100位。以后超q?span lang="EN-US">100位怎么办,况且如果你只?span lang="EN-US">19位的帐号Q我们定义了100位,?span lang="EN-US">81位的数据不是费了网l的带宽。看来预先定义一个我们认为比较大的位数是不太好的?span lang="EN-US">
  
    我们q样Q对于第2个字D?#8220;帐号”Q在字段的开头加?#8220;帐号”的长度。比如帐h0123456789Q一?span lang="EN-US">10位,我们变成100123456789Q注意前面多了个10Q表C后面的10位ؓ帐号。如果你接触q?span lang="EN-US">COM里面?span lang="EN-US">BSTRQ应该对q种处理比较熟悉了。接收方收到该字D后Q它知道ISO8583规定W?span lang="EN-US">2个字D?#8220;帐号”是变长的Q所以会先取前面?span lang="EN-US">2位出来,获取其|此时为长度,然后Ҏ该长度值知道应该拷贝该字段后面哪几位数据,才是真正的帐受如果你觉得长度如果只有两位最多只能表C?span lang="EN-US">99位长Q不太够Q我们也定义可以允许前面3位都为长度的变长字段Q这样就?span lang="EN-US">999位长Q应该够了吧。在规范里面如果我定义某个字D늚属性是“LLVAR”Q你注意了,其中?span lang="EN-US">LL表示长度Q?span lang="EN-US">VAR表示后面的数据,两个LL表示两位长,最大是99Q如果是三位是“LLLVAR”Q最大是999。这L我们定义?span lang="EN-US">ISO8583规范文档时直接根据这几个字母q解某个变长字D늚意思了?span lang="EN-US">

    该解决的几个问题到这里都解决了,我们来回下自己设计?span lang="EN-US">ISO8583规范。其实没有什么,无非是把金融行业可能出现的数据分门别c,排好序Q接着把它们连接v来,l成一个报文发送出去而已。其中针对该报文的设计进行了一些优化,引入?span lang="EN-US">bit map位图的概念,也算是一个不错的x?span lang="EN-US">

    剩下的工作就单了Q我们就直接攉金融行业可能出现的数据字D늱型,分成128个字D늱型,如果没有?span lang="EN-US">128个这么多先保留一些下来,另外考虑到有些h有特D的要求Q我们规定可以将128个字D中的几个字D你自己来定义其内容Q也是一U扩展了?span lang="EN-US">

    q样Q最后我们就得到?span lang="EN-US">ISO8583规范的那张字D|q表了。想要详l的知道每个字段的含义直接对着表看可以,比较单?/span>

anselly 2011-06-02 18:39 发表评论
]]>
վ֩ģ壺 | ʯ| ؼ| | | | ɽ| | ̨| | ʡ| ̩| ƫ| | ˹| | | | Ļ| ľ| | | ָɽ| | | | | ɳ| ȫ| | ƽɽ| | | ӳ| ˮ| ̨| ̩| ݰ| ۩| | DZ|