package net.sf.dvstar.uacodecheck.codec;
import android.app.Activity;
import android.graphics.Color;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
import android.util.Log;
/**
* Created by dstarzhynskyi on 28.04.2015.
*/
public class AccCodec implements ICodec {
public static final int[] weightOfControl = {1,3,7,1,3,3,7,1,3,7,1,3,7,1,3,7,1,3,7};
private String mChk;
private String mAcc;
private String mMfo;
private Activity mParent;
private String TAG = "AccCodec";
public AccCodec(Activity parent, String vMfo, String vAcc){
this.mParent = parent;
this.mMfo = vMfo;
this.mAcc = vAcc;
this.mChk = mMfo.substring(0,5)+ mAcc.substring(0,4) + "0" + mAcc.substring(5, mAcc.length() );;
}
public String getCheckSum(){
String ret = "";
char cCheckAcc[] = mChk.toCharArray();
Log.v(TAG, "cCheckAcc["+mChk.length()+"]["+mChk+"]["+mAcc+"]");
int sum = 0;
for(int i=0;i<cCheckAcc.length;i++){
int a1=Integer.parseInt(""+(cCheckAcc[i]));
int a2=weightOfControl[i];
int part = a1*a2;
//Log.v(TAG, "cCheckAcc["+i+"]["+a1+"]["+a2+"]["+part+"]["+(part % 10)+"]");
sum += (part % 10);
}
Log.v(TAG, "getCheckSum() sum1 ="+sum+" "+mAcc.length());
sum += mAcc.length();
Log.v(TAG, "getCheckSum() sum2 ="+sum);
ret = ""+(sum % 10 * 7) % 10;
Log.v(TAG, "getCheckSum() checkAcc ["+ret+"]");
return ret;
}
public String getValue(){
char[] cAcc = mAcc.toCharArray();
cAcc[4]=getCheckSum().charAt(0);
String ret = new String( cAcc );
Log.v(TAG, "getValue() ["+cAcc[4]+"]["+mAcc+"]["+ret+"]");
return ret;
}
@Override
public int getMinLen() {
return 5;
}
@Override
public int getMaxLen() {
return 14;
}
@Override
public Spannable getSpannable() {
Spannable ret = new SpannableString(getValue());
ret.setSpan(new ForegroundColorSpan(Color.GREEN), 0, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
ret.setSpan(new ForegroundColorSpan(Color.RED), 4, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
return ret;
}
}