Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
package com.github.javafaker;
import org.apache.commons.lang3.ArrayUtils;
import static org.apache.commons.lang3.math.NumberUtils.toInt;
/**
* ISBN Rules : https://en.wikipedia.org/wiki/International_Standard_Book_Number
*/
public class Code {
private final Faker faker;
protected Code(Faker faker) {
this.faker = faker;
}
/**
* This can be overridden by specifying
*
* code:
* isbn_gs1: "some expression"
*
* in the appropriate yml file.
* @return a GS1 code for an ISBN13, currently is only 978 and 979
*/
public String isbnGs1() {
return faker.regexify("978|979");
}
/**
* This can be overridden by specifying
*
* code:
* isbn_group: "some expression"
*
* in the appropriate yml file.
* @return an ISBN group number
*/
public String isbnGroup() {
return faker.regexify("[0-1]");
}
/**
* This can be overridden by specifying
*
* code:
* isbn_registrant: "some expression"
*
* in the appropriate yml file.
* @return an ISBN registrant 'element' with separator
*/
public String isbnRegistrant() {
int ct = faker.random().nextInt(6) + 1;
switch (ct) {
case 6:
return faker.number().numberBetween(0,1) + faker.number().digit() + "-" + faker.number().digits(6);
case 5:
return faker.number().numberBetween(200,699) + "-" + faker.number().digits(5);
case 4:
return faker.number().numberBetween(7000,8499) + "-" + faker.number().digits(4);
case 3:
return faker.number().numberBetween(85000,89999) + "-" + faker.number().digits(3);
case 2:
return faker.number().numberBetween(900000,949999) + "-" + faker.number().digits(2);
case 1:
return faker.number().numberBetween(9500000,9999999) + "-" + faker.number().digits(1);
default:
throw new IllegalStateException("Invalid random " + ct);
}
}
/**
* @return a valid ISBN10 number with no separators (ex. 9604250590)
*/
public String isbn10() {
return isbn10(false);
}
/**
* @param separator true if you want separators returned, false otherwise
* @return a valid ISBN10 number with or without separators (ex. 9604250590, 960-425-059-0)
*/
public String isbn10(boolean separator) {
// The registration group identifier is a 1- to 5-digit number
final StringBuilder isbn10 = new StringBuilder()
.append(faker.expression("#{code.isbn_group}"))
.append('-')
.append(faker.expression("#{code.isbn_registrant}"))
.append('-');
final int checkDigit = isbn10CheckDigit(isbn10);
isbn10.append(checkDigit != 10 ? checkDigit : "X");
return separator ? isbn10.toString() : stripIsbnSeparator(isbn10);
}
/**
* @return a valid ISBN13 number with no separators (ex. 9789604250590)
*/
public String isbn13() {
return isbn13(false);
}
/**
* @param separator true if you want separators returned, false otherwise
* @return a valid ISBN13 number with or without separators (ex. 9789604250590, 978-960-425-059-0)
*/
public String isbn13(boolean separator) {
// The registration group identifier is a 1- to 5-digit number
final StringBuilder isbn13 = new StringBuilder()
.append(faker.expression("#{code.isbn_gs1}"))
.append('-')
.append(faker.expression("#{code.isbn_group}"))
.append('-')
.append(faker.expression("#{code.isbn_registrant}"))
.append('-');
final int checkDigit = isbn13CheckDigit(isbn13);
isbn13.append(checkDigit);
return separator ? isbn13.toString() : stripIsbnSeparator(isbn13);
}
private final int isbn10CheckDigit(CharSequence t) {
String value = stripIsbnSeparator(t);
int sum = 0;
for (int i = 0; i < value.length(); i++) {
sum += ((i + 1) * toInt(value.substring(i, i + 1)));
}
return sum % 11;
}
private final int isbn13CheckDigit(CharSequence t) {
String value = stripIsbnSeparator(t);
int sum = 0;
int multiplier = 0;
for (int i = 0; i < value.length(); i++) {
multiplier = i % 2 == 0 ? 1 : 3;
sum += multiplier * toInt(value.subSequence(i, i + 1).toString());
}
return (10 - sum % 10) % 10;
}
private final String stripIsbnSeparator(CharSequence t) {
return t.toString().replaceAll("-","");
}
public String asin() {
return faker.resolve("code.asin");
}
public String imei() {
char[] str = new char[15];
int len = str.length;
// Fill in the first two values of the string based with the specified prefix.
String arr = faker.options().option(REPORTING_BODY_IDENTIFIERS);
str[0] = arr.charAt(0);
str[1] = arr.charAt(1);
// Fill all the remaining numbers except for the last one with random values.
for (int i=2; i < len - 1; i++) {
str[i] = Character.forDigit(faker.number().numberBetween(0, 9), 10);
}
// Calculate the Luhn checksum of the values thus far
int lenOffset = (len + 1) % 2;
int t = 0;
int sum = 0;
for (int i = 0; i < len - 1; i++) {
if ((i + lenOffset) % 2 != 0) {
t = Character.getNumericValue(str[i]) * 2;
if (t > 9) {
t -= 9;
}
sum += t;
} else {
sum += Character.getNumericValue(str[i]);
}
}
// Choose the last digit so that it causes the entire string to pass the checksum.
str[len - 1] = Character.forDigit(((10 - (sum % 10)) % 10), 10);
return new String(str);
}
private static final String [] REPORTING_BODY_IDENTIFIERS
= {"01", "10", "30", "33", "35", "44", "45", "49", "50", "51", "52", "53", "54", "86", "91", "98", "99"};
public String ean8() {
return gtin8();
}
public String gtin8() {
char[] values = faker.regexify("\\d{7}").toCharArray();
int sum = 0;
for (int i = 0; i < values.length; i++) {
sum += Character.getNumericValue(values[i]) * GTIN_8_CHECK_DIGITS[i];
}
int checkDigit = 10 - sum % 10;
if (checkDigit == 10) {
return new String(ArrayUtils.add(values, Character.forDigit(0, 10)));
} else {
return new String(ArrayUtils.add(values, Character.forDigit(checkDigit, 10)));
}
}
public String ean13() {
return gtin13();
}
public String gtin13() {
char[] values = faker.regexify("\\d{12}").toCharArray();
int sum = 0;
for (int i = 0; i < values.length; i++) {
sum += Character.getNumericValue(values[i]) * GTIN_13_CHECK_DIGITS[i];
}
int checkDigit = 10 - sum % 10;
if (checkDigit == 10) {
return new String(ArrayUtils.add(values, Character.forDigit(0, 10)));
} else {
return new String(ArrayUtils.add(values, Character.forDigit(checkDigit, 10)));
}
}
private static final int[] GTIN_8_CHECK_DIGITS = { 3, 1, 3, 1, 3, 1, 3 };
private static final int[] GTIN_13_CHECK_DIGITS = { 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3 };
}