//byte[]pic=parseByte(fsnBytes,4);
//Strings=MessageUtil.toBinaryString(pic);
//i++;
//}
}
publicFsnBodygetSnoExpImg(byte[]fsnBytes){
FsnBodybody=newFsnBody();
//设置日期时间
intdata=parseInt(fsnBytes);
inttime=parseInt(fsnBytes);
//System.out.println("data="+data);
//System.out.println("time="+time);
/*if(time<0){
time=-time;}*/
inty=data>>9;
intm=(data-(y<<9))>>5;
intd=data-(y<<9)-(m<<5);inthh=time>>11;
intmm=(time-(hh<<11))>>5;
intss=(time-(hh<<11)-(mm<<5))<<1;/*
StringDateStr=StrUtil.numAddZero(String.valueOf((y+1980)),4)+
"-"+StrUtil.numAddZero(String.valueOf(m),2)+"-"+
StrUtil.numAddZero(String.valueOf(d),2);
StringTimeStr=hh+":
"+mm+":
"+ss;
body.setDateStr(DateStr);body.setTimeStr(TimeStr);
//*/
//*
StringBufferDateBuf=newStringBuffer();
StringBufferTimeBuf=newStringBuffer();
DateBuf.append(y+1980);DateBuf.append("-");
DateBuf.append(FsnTools.numAddZero(m,2));
DateBuf.append("-");
DateBuf.append(FsnTools.numAddZero(d,2));
TimeBuf.append(FsnTools.numAddZero(hh,2));
TimeBuf.append(":
");
TimeBuf.append(FsnTools.numAddZero(mm,2));
TimeBuf.append(":
");
TimeBuf.append(FsnTools.numAddZero(ss,2));
body.setDateStr(DateBuf.toString());
body.setTimeStr(TimeBuf.toString());
body.setDateStr(DateBuf.toString());
body.setTimeStr(TimeBuf.toString());
body.setDateTime(body.getDateStr()+""+body.getTimeStr());
//设置货币真假残和旧币标志
body.setTfFlag(parseInt(fsnBytes));
//设置货币错误
StringBuffererrorCode=newStringBuffer();
/*for(inti=0;i<3;i++){
intcode=parseInt(fsnBytes);
if(code<13&&code>0){
errorCode+=code+",";
}
}
if("1".equals(map.get("TfFlag")))
errorCode=errorCode.substring(0,
errorCode.lastIndexOf(","));
else
errorCode="0";*/
for(inti=0;i<3;i++){
intcode=parseInt(fsnBytes);
if(i==0){
errorCode.append(code);
}else{
errorCode.append(":
");
errorCode.append(code);}
}
body.setErrorCode(errorCode.toString());//设置币种标志
StringmoneyFlag="";
for(inti=0;i<4;i++){
intflag=parseInt(fsnBytes);
if(flag!
=0){
moneyFlag+=(char)flag;}
}
body.setMoneyFlag(moneyFlag);
//设置年版或版本号标志
intver=parseInt(fsnBytes);
//body.setVer(FsnTool.deMoneyVer(ver));
body.setVer(ver);
//设置币
body.setValuta(parseInt(fsnBytes));
//设置冠字号位
body.setCharNum(parseInt(fsnBytes));//设置冠字
StringBufferno=newStringBuffer();
for(inti=0;i<12;i++){
intNo=parseInt(fsnBytes);
if(No!
=0)
no.append((char)No);
}
body.setSno(no.toString());
//设置机具编号
StringBuffermachineSNo=newStringBuffer();
for(inti=0;i<24;i++){
intMsno=parseInt(fsnBytes);
if(Msno!
=0)
machineSNo.append((char)Msno);}
body.setMachineSno(machineSNo.toString());//设置冠字号保留字
body.setReserve1(parseInt(fsnBytes));
//System.out.println("时间="+body.getDateStr()+""+
body.getTimeStr()+"|真假币标志="+body.getTfFlag()+"|表示最多3组假币特征码
="+body.getErrorCode()+"|"+
//"|币种标志="+body.getMoneyFlag()+"|年版或版本号标志
="+body.getVer()+"|币值="+body.getValuta()+"|冠字号码字符数
="+body.getCharNum()+"|存放识别的冠字号码="+
//body.getSno()+"|机具编号="+body.getMachineSno()+"|保留字1="+body.getRecordNum());
returnbody;}
publicvoidsetHead(byte[]fsnBytes)throwsException{
this.filePos=0;//读取文件头数据的当前指针位置,设置字节位移从0开始if(this.fm==null){
this.fm=newFsnModel(this.fsnFilePath);
}
int[]headStart=newint[4];
for(inti=0;i<4;i++){
headStart[i]=parseInt(fsnBytes);
//System.out.println("headStart["+i+"]="+headStart[i]);
}
fm.setHeadStart(headStart);
int[]headString=newint[6];
for(inti=0;i<6;i++){
headString[i]=parseInt(fsnBytes);
//System.out.println("headString["+i+"]="+headString[i]);
}
fm.setHeadString(headString);
longcounter=parseLong(fsnBytes);
//System.out.println("counter="+counter);
fm.setCounter(counter);
int[]headEnd=newint[4];
for(inti=0;i<4;i++){
headEnd[i]=parseInt(fsnBytes);
//System.out.println("headEnd["+i+"]="+headEnd[i]);
}
fm.setHeadEnd(headEnd);}
publicintparseInt(byte[]fsnBytes){
int
ret=(int)FsnTools.demarshallintLittle(fsnBytes,filePos,intstep);
this.filePos+=intstep;
//System.out.println("this.filePos="+this.filePos+"||ret="+ret);
returnret;}
publiclongparseLong(byte[]fsnBytes){
long
ret=FsnTools.demarshallintLittle(fsnBytes,filePos,stringstep);
this.filePos+=stringstep;
returnret;
}
publicbyte[]parseByte(byte[]fsnBytes,intlength){
byte[]ret=FsnTools.convertByteMarshall(fsnBytes,filePos,length);
this.filePos+=length;
returnret;
}
}
packagebean;
publicclassFsnBody{
privateStringDateStr;//验钞启动日期
privateStringTimeStr;//验钞启动时间
/**日期+时间
*指定年月日的日期数据的产生算法为:
Date=((Year-1980)<<9)+(Month<<5)+Day
其中:
Year为年份,大于等于1980;Month为月份;Day为日;
指定时分秒的时间数据产生算法为:
Time=(Hour<<11)+(Minute<<5)+
(Second>>1)
其中:
0≤Hour<24,0≤Minute<60,0≤Second<60
*/
privateStringDateTime;//验钞启动日期+时间
privateintTfFlag;//真假币标志,0为假币或可疑币,1为真币,2为残币(清分
机适用),3为旧币(清分机适用);
privateStringErrorCode;//表示最多3组假币特征码(特征码有12种,分别为
1,2,3,4,5,6,7,8,9,10,11,12),真币时填0;如果只有一组特征码,把特征码填在
ErrorCode[0],则其余两组填0;如果有两组特征码,把特征码填在ErrorCode[0]和
ErrorCode[1],剩余的一组填0
privateStringMoneyFlag;//币种标志,最多4位大写ASCII英文字母,不足4
位的其余位填0:
CNY:
人民币
privateintVer;//年版或版本号标志;人民币用作年版标志,值填0,1,2,分
别代表1990,1999,2005三个年版,可根据实际情况扩充;其余币种填9999(表示不考虑
年版);
privateintValuta;//币值,最大币值为50000
privateintCharNum;//冠字号码字符数,指明存储在数组SNo的号码个数;
privateStringSno;//存放识别的冠字号码,每个数组元素存放一位号码(ASCII
字符),最多12位,不足12位的其余位填0;
privateStringMachineSno;//机具编号,必须为24位,每个数组元素存放一位
ASCII字符,不足24位的其余位填0;
privateintReserve1;//保留字1
privateintRecordNum;//冠字号信息在Fsn文件中的行号,从1开始
privatebyte[]ImageBytes;//冠字号信息的图片数据字节数组,保存的原始格
式,未转换
privateStringImgStr;//图片压缩后的字符串
privateStringaccNo="";//冠字号信息产生的账号,Atm等自助存取款机才会有此值
publicStringgetDateStr(){
returnDateStr;}
publicvoidsetDateStr(StringdateStr){
DateStr=dateStr;}
publicStringgetTimeStr(){
returnTim