package io.codearte.jfairy.producer.person.locale.zh;
import com.google.inject.Inject;
import io.codearte.jfairy.producer.BaseProducer;
import io.codearte.jfairy.producer.DateProducer;
import io.codearte.jfairy.producer.TimeProvider;
import io.codearte.jfairy.producer.person.NationalIdentityCardNumberProvider;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import static io.codearte.jfairy.producer.util.ZhFairyUtil.*;
/**
* Chinese National Identity Card Number, total 18 digits
*
* @author Lhfcws
* @since 27.02.17
*/
public class ZhNationalIdentityCardNumberProvider implements NationalIdentityCardNumberProvider {
/**
* The last 4 digit is an order number from 0001 to 9999
*/
private static final int ORDER_MAX = 9999;
private static DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyyMMdd");
private final BaseProducer baseProducer;
private final DateProducer dateProducer;
@Inject
public ZhNationalIdentityCardNumberProvider(BaseProducer baseProducer) {
this.baseProducer = baseProducer;
this.dateProducer = new DateProducer(baseProducer, new TimeProvider());
}
@Override
public String get() {
StringBuilder idBuilder = new StringBuilder();
idBuilder.append(baseProducer.randomElement(PROV_LIST));
idBuilder.append(getRandomNumStr(baseProducer, CITY_MAX, 2));
idBuilder.append(getRandomNumStr(baseProducer, DISTRICT_MAX, 2));
idBuilder.append(getBirthDate());
idBuilder.append(getRandomNumStr(baseProducer, ORDER_MAX, 4));
return idBuilder.toString();
}
private String getBirthDate() {
DateTime birthDate = this.dateProducer.randomDateInThePast(50);
return formatter.print(birthDate);
}
}