-annotation.processing.enabled=true
-annotation.processing.enabled.in.editor=true
-annotation.processing.processors.list=
-annotation.processing.run.all.processors=true
-annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
-application.title=jcustomer-core
-application.vendor=Roland Haeder
-auxiliary.org-netbeans-spi-editor-hints-projects.perProjectHintSettingsFile=nbproject/cfg_hints.xml
-build.classes.dir=${build.dir}/classes
-build.classes.excludes=**/*.java,**/*.form
-# This directory is removed when the project is cleaned:
-build.dir=build
-build.generated.dir=${build.dir}/generated
-build.generated.sources.dir=${build.dir}/generated-sources
-# Only compile against the classpath explicitly listed here:
-build.sysclasspath=ignore
-build.test.classes.dir=${build.dir}/test/classes
-build.test.results.dir=${build.dir}/test/results
-# Uncomment to specify the preferred debugger connection transport:
-#debug.transport=dt_socket
-debug.classpath=\
- ${run.classpath}
-debug.test.classpath=\
- ${run.test.classpath}
-# Files in build.classes.dir which should be excluded from distribution jar
-dist.archive.excludes=
-# This directory is removed when the project is cleaned:
-dist.dir=dist
-dist.jar=${dist.dir}/jcustomer-core.jar
-dist.javadoc.dir=${dist.dir}/javadoc
-endorsed.classpath=
-excludes=
-file.reference.commons-codec-1.10.jar=lib/commons-codec-1.10.jar
-file.reference.jcontacts-core.jar=lib/jcontacts-core.jar
-file.reference.jcore.jar=lib/jcore.jar
-file.reference.jcoreee.jar=lib/jcoreee.jar
-includes=**
-jar.archive.disabled=${jnlp.enabled}
-jar.compress=false
-jar.index=${jnlp.enabled}
-javac.classpath=\
- ${file.reference.jcore.jar}:\
- ${file.reference.jcoreee.jar}:\
- ${file.reference.jcontacts-core.jar}:\
- ${file.reference.commons-codec-1.10.jar}:\
- ${libs.javaee-api-7.0.classpath}
-# Space-separated list of extra javac options
-javac.compilerargs=-Xlint:unchecked -Xlint:deprecation
-javac.deprecation=true
-javac.external.vm=false
-javac.processorpath=\
- ${javac.classpath}
-javac.source=1.7
-javac.target=1.7
-javac.test.classpath=\
- ${javac.classpath}:\
- ${build.classes.dir}
-javac.test.processorpath=\
- ${javac.test.classpath}
-javadoc.additionalparam=
-javadoc.author=true
-javadoc.encoding=${source.encoding}
-javadoc.noindex=false
-javadoc.nonavbar=false
-javadoc.notree=false
-javadoc.private=true
-javadoc.splitindex=true
-javadoc.use=true
-javadoc.version=true
-javadoc.windowtitle=Java Shop Core
-jnlp.codebase.type=no.codebase
-jnlp.descriptor=application
-jnlp.enabled=false
-jnlp.mixed.code=default
-jnlp.offline-allowed=false
-jnlp.signed=false
-jnlp.signing=
-jnlp.signing.alias=
-jnlp.signing.keystore=
-# Optional override of default Codebase manifest attribute, use to prevent RIAs from being repurposed
-manifest.custom.codebase=
-# Optional override of default Permissions manifest attribute (supported values: sandbox, all-permissions)
-manifest.custom.permissions=
-meta.inf.dir=${src.dir}/META-INF
-mkdist.disabled=true
-platform.active=default_platform
-project.license=gpl30
-run.classpath=\
- ${javac.classpath}:\
- ${build.classes.dir}
-# Space-separated list of JVM arguments used when running the project.
-# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
-# To set system properties for unit tests define test-sys-prop.name=value:
-run.jvmargs=
-run.test.classpath=\
- ${javac.test.classpath}:\
- ${build.test.classes.dir}
-source.encoding=UTF-8
-source.reference.jcontacts-core.jar=../jcontacts-core/src/
-source.reference.jcore.jar=../jcore/src/
-source.reference.jcoreee.jar=../jcoreee/src/
-src.dir=src
-test.src.dir=test
+annotation.processing.enabled=true\r
+annotation.processing.enabled.in.editor=true\r
+annotation.processing.processors.list=\r
+annotation.processing.run.all.processors=true\r
+annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output\r
+application.title=jcustomer-core\r
+application.vendor=Roland Haeder\r
+auxiliary.org-netbeans-spi-editor-hints-projects.perProjectHintSettingsFile=nbproject/cfg_hints.xml\r
+build.classes.dir=${build.dir}/classes\r
+build.classes.excludes=**/*.java,**/*.form\r
+# This directory is removed when the project is cleaned:\r
+build.dir=build\r
+build.generated.dir=${build.dir}/generated\r
+build.generated.sources.dir=${build.dir}/generated-sources\r
+# Only compile against the classpath explicitly listed here:\r
+build.sysclasspath=ignore\r
+build.test.classes.dir=${build.dir}/test/classes\r
+build.test.results.dir=${build.dir}/test/results\r
+# Uncomment to specify the preferred debugger connection transport:\r
+#debug.transport=dt_socket\r
+debug.classpath=\\r
+ ${run.classpath}\r
+debug.test.classpath=\\r
+ ${run.test.classpath}\r
+# Files in build.classes.dir which should be excluded from distribution jar\r
+dist.archive.excludes=\r
+# This directory is removed when the project is cleaned:\r
+dist.dir=dist\r
+dist.jar=${dist.dir}/jcustomer-core.jar\r
+dist.javadoc.dir=${dist.dir}/javadoc\r
+endorsed.classpath=\r
+excludes=\r
+file.reference.commons-codec-1.10.jar=lib/commons-codec-1.10.jar\r
+file.reference.commons-lang3-3.4.jar=lib/commons-lang3-3.4.jar\r
+file.reference.jcontacts-core.jar=lib/jcontacts-core.jar\r
+file.reference.jcore.jar=lib/jcore.jar\r
+file.reference.jcoreee.jar=lib/jcoreee.jar\r
+includes=**\r
+jar.archive.disabled=${jnlp.enabled}\r
+jar.compress=false\r
+jar.index=${jnlp.enabled}\r
+javac.classpath=\\r
+ ${file.reference.jcore.jar}:\\r
+ ${file.reference.jcoreee.jar}:\\r
+ ${file.reference.jcontacts-core.jar}:\\r
+ ${file.reference.commons-codec-1.10.jar}:\\r
+ ${file.reference.commons-lang3-3.4.jar}:\\r
+ ${libs.javaee-api-7.0.classpath}\r
+# Space-separated list of extra javac options\r
+javac.compilerargs=-Xlint:unchecked -Xlint:deprecation\r
+javac.deprecation=true\r
+javac.external.vm=false\r
+javac.processorpath=\\r
+ ${javac.classpath}\r
+javac.source=1.7\r
+javac.target=1.7\r
+javac.test.classpath=\\r
+ ${javac.classpath}:\\r
+ ${build.classes.dir}\r
+javac.test.processorpath=\\r
+ ${javac.test.classpath}\r
+javadoc.additionalparam=\r
+javadoc.author=true\r
+javadoc.encoding=${source.encoding}\r
+javadoc.noindex=false\r
+javadoc.nonavbar=false\r
+javadoc.notree=false\r
+javadoc.private=true\r
+javadoc.reference.commons-lang3-3.4.jar=https://commons.apache.org/proper/commons-lang/javadocs/api-3.4/\r
+javadoc.splitindex=true\r
+javadoc.use=true\r
+javadoc.version=true\r
+javadoc.windowtitle=Java Shop Core\r
+jnlp.codebase.type=no.codebase\r
+jnlp.descriptor=application\r
+jnlp.enabled=false\r
+jnlp.mixed.code=default\r
+jnlp.offline-allowed=false\r
+jnlp.signed=false\r
+jnlp.signing=\r
+jnlp.signing.alias=\r
+jnlp.signing.keystore=\r
+# Optional override of default Codebase manifest attribute, use to prevent RIAs from being repurposed\r
+manifest.custom.codebase=\r
+# Optional override of default Permissions manifest attribute (supported values: sandbox, all-permissions)\r
+manifest.custom.permissions=\r
+meta.inf.dir=${src.dir}/META-INF\r
+mkdist.disabled=true\r
+platform.active=default_platform\r
+project.license=gpl30\r
+run.classpath=\\r
+ ${javac.classpath}:\\r
+ ${build.classes.dir}\r
+# Space-separated list of JVM arguments used when running the project.\r
+# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.\r
+# To set system properties for unit tests define test-sys-prop.name=value:\r
+run.jvmargs=\r
+run.test.classpath=\\r
+ ${javac.test.classpath}:\\r
+ ${build.test.classes.dir}\r
+source.encoding=UTF-8\r
+source.reference.jcontacts-core.jar=../jcontacts-core/src/\r
+source.reference.jcore.jar=../jcore/src/\r
+source.reference.jcoreee.jar=../jcoreee/src/\r
+src.dir=src\r
+test.src.dir=test\r
package org.mxchange.jcustomercore.utils;
import java.security.SecureRandom;
+import java.text.MessageFormat;
import java.util.Random;
+import org.apache.commons.lang3.StringUtils;
/**
* Customer utilities
/**
* Generates a random customer number with some dashes in it
* <p>
- * @param length Length of the number
+ * @param totalLength Length of the number
+ * @param blockSize Block size
+ * @param separator Seperator
* <p>
* @return Generated customer number
*/
- public static String generateCustomerNumber (final long length) {
- throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ public static String generateCustomerNumber (final int totalLength, final short blockSize, final char separator) {
+ // All parameters must be set
+ if (totalLength < 5) {
+ // Total length is to short
+ throw new IllegalArgumentException(MessageFormat.format("Total length of{0} characters is to short (5 minimum)", totalLength)); //NOI18N
+ } else if (blockSize < 3) {
+ // 3 charcters is minimum
+ throw new IllegalArgumentException(MessageFormat.format("Block size of {0} characters is to short (3 minimum)", blockSize)); //NOI18N
+ }
+
+ // Init number
+ StringBuilder customerNumber = new StringBuilder(totalLength);
+
+ // Calculate total blockas
+ long totalBlocks = Math.round(totalLength / (blockSize - 1) - 0.5);
+
+ // Generate CN
+ for (int i = 0; i < totalBlocks; i++) {
+ // Fill it up with leading zeros and append it + separator character
+ customerNumber.append(genrateBlock(blockSize)).append(separator);
+ }
+
+ // Calculate remaining charcters
+ long remain = totalLength - blockSize * totalBlocks;
+
+ // Generate new block and append it
+ customerNumber.append(genrateBlock((short) remain));
+
+ // Return finished number
+ return customerNumber.toString();
+ }
+
+ /**
+ * Generates a block of numbers with leading zeros, if the random number is
+ * shorter than block size
+ * <p>
+ * @param blockSize Block size
+ * <p>
+ * @return Generated block
+ */
+ private static String genrateBlock (final short blockSize) {
+ // Generate random number
+ int num = RANDOM_NUMBER_GENERATOR.nextInt(10 ^ blockSize);
+
+ // Generate "block" and return it
+ return StringUtils.leftPad(String.valueOf(num), blockSize, '0');
}
/**