package br.com.six2six.fixturefactory.function.impl;
import br.com.six2six.fixturefactory.base.Range;
import br.com.six2six.fixturefactory.function.AtomicFunction;
public class CnpjFunction implements AtomicFunction {
private boolean formatted;
public CnpjFunction() { }
public CnpjFunction(boolean formatted) {
this.formatted = formatted;
}
@Override
@SuppressWarnings("unchecked")
public <T> T generateValue() {
RandomFunction random = new RandomFunction(Integer.class, new Range(1, 9));
Integer a = random.generateValue();
Integer b = random.generateValue();
Integer c = random.generateValue();
Integer d = random.generateValue();
Integer e = random.generateValue();
Integer f = random.generateValue();
Integer g = random.generateValue();
Integer h = random.generateValue();
Integer i = 0;
Integer j = 0;
Integer l = 0;
Integer m = 1;
int n = m*2+l*3+j*4+i*5+h*6+g*7+f*8+e*9+d*2+c*3+b*4+a*5;
n = n % 11 < 2 ? 0 : 11 - (n % 11);
int o = n*2+m*3+l*4+j*5+i*6+h*7+g*8+f*9+e*2+d*3+c*4+b*5+a*6;
o = o % 11 < 2 ? 0 : 11 - (o % 11);
return (T) String.format(formatted? "%d%d.%d%d%d.%d%d%d/%d%d%d%d-%d%d" : "%d%d%d%d%d%d%d%d%d%d%d%d%d%d", a, b, c, d, e, f, g, h, i, j, l, m, n, o);
}
}