JAN Code는 쉽게 말해서
일본에서 사용되는 바코드의 형태이다. (JAN 자체가 Japanese Article Numbering 의 약자)
바코드와 같이 각 Index별로 의미하는 값이 정해진다
(참조 :https://www.gs1jp.org/code/jan/procedure.html)
실제 구현 코드보면 글보다 더 쉽다..
#C++/QT 사용
#include <QString>
#include <QVector>
#include <QRegularExpression>
bool validateCode(const QString& code, int length)
{
QRegularExpression regex("^[0-9]{" + QString::number(length) + "}$");
QRegularExpressionMatch match = regex.match(code);
return match.hasMatch();
}
bool validateManufacturerCode(const QString& manufacturerCode)
{
// 제조사 코드의 유효성 검증
return validateCode(manufacturerCode, 5);//(예: 5자리의 숫자)
}
bool validateProductCode(const QString& productCode)
{
// 제품 코드의 유효성 검증
return validateCode(productCode, 5); //(예: 5자리의 숫자)
}
int calculateCheckDigit(const QString& number) {
QVector<int> digits;
for (QChar c : number) {
digits.push_back(c.digitValue());
}
int oddSum = 0;
int evenSum = 0;
int total = 0;
for (int i = 0; i < digits.size(); ++i) {
if (i % 2 == 0) {
oddSum += digits[i];
}
else {
evenSum += digits[i];
}
}
total = (oddSum * 3) + evenSum;
int checkDigit = (10 - (total % 10)) % 10;
return checkDigit;
}
QString generateJANCode(const QString& manufacturerCode, const QString& productCode) {
QString countryCode = "49"; //일본 국가 코드
//Code 순서 ( 국가코드 + 제조사코드 + 제품코드 )
QString combinedCode = countryCode + manufacturerCode + productCode;
int checkDigit = calculateCheckDigit(combinedCode);
QString janCode = combinedCode + QString::number(checkDigit);
return janCode;
}
bool checkJANCode(const QString& janCode) {
QString reversedCode = janCode.mid(0, janCode.size() - 1);
std::reverse(reversedCode.begin(), reversedCode.end());
int oddSum = 0;
int evenSum = 0;
for (int i = 0; i < reversedCode.size(); ++i) {
int digit = reversedCode[i].digitValue();
if (i % 2 == 0) {
oddSum += digit;
}
else {
evenSum += digit;
}
}
int total = (oddSum * 3) + evenSum;
int checkDigit = (10 - (total % 10)) % 10;
return checkDigit == janCode[janCode.size() - 1].digitValue();
}
bool MakeJanCode()
{
QString manufacturerCode = "12345"; //제조사 코드
if(!validateManufacturerCode(manufacturerCode))
return false;
QString productCode = "00001"; //제품코드
if(!validateProductCode(productCode))
return false;
//Generate JanCode
QString janCode = generateJANCode(manufacturerCode, productCode);
// Print the JAN code
qDebug() << "JANCode: " << janCode;
bool res = checkJANCode(janCode);
if (res)
qDebug() << "Success";
else qDebug() << "Fail";
}
일본에 판매하는 제품에 대한 코드 이기 때문에
국가 코드는 일본 국가 코드인 49로 고정(45도 OK)
판매 제품의 제조사 코드와 제품 코드값을 입력하여 최종 JAN Code 를 생성한다.