জন্ম নম্বর যাচাই করুন


9

নরওয়েজিয়ান জন্মের সংখ্যাটি 11 টি সংখ্যার সমন্বয়ে নিম্নলিখিত উপায়ে গঠিত:

DDMMYYiiikk
  • DD দিনটি (01-31 থেকে)
  • MM মাস (01-12 থেকে)
  • YYবছর (00-99 থেকে)। এটি 1900 এবং 2000 এর মধ্যে পার্থক্যযুক্ত নয়
  • iii "স্বতন্ত্র সংখ্যা"
  • kk দুটি নিয়ন্ত্রণ সংখ্যা

iii নিম্নলিখিত পদ্ধতিতে জন্মগত এবং লিঙ্গ দ্বারা নির্ধারিত হয়

  • 0000-1900: উপেক্ষা করুন, কিছু অসঙ্গতি এবং বিশেষ ক্ষেত্রে রয়েছে
  • 1900-1999: ব্যাপ্তি = 000-499
  • 2000-2039: পরিসীমা = 500-999
  • মহিলা: এমনকি সংখ্যা (এবং 000)
  • পুরুষ: বিজোড় সংখ্যা

নিয়ন্ত্রণ নম্বরগুলি নিম্নলিখিত উপায়ে নির্ধারিত হয়:

11 টি সংখ্যায় কল করুন:

d1 d2 m1 m2 y1 y2 i1 i2 i3 k1 k2

তারপরে নিয়ন্ত্রণের অঙ্কগুলি সমীকরণগুলি ব্যবহার করে গণনা করা যায়:

k1 = 11 - ((3 * d1 + 7 * d2 + 6 * m1 + 1 * m2 + 8 * y1 + 9 * y2 + 4 * i1 + 5 * i2 + 2 * i3) mod 11)

k2 = 11 - ((5 * d1 + 4 * d2 + 3 * m1 + 2 * m2 + 7 * y1 + 6 * y2 + 5 * i1 + 4 * i2 + 3 * i3 + 2 * k1) mod 11).

কিছু সংমিশ্রণের জন্য, নিয়ন্ত্রণ সংখ্যা k1বা k2হয়ে উঠতে পারে 10। যদি এটি হয় তবে নম্বরটি অবৈধ।

যদি যোগফল 11 এর জন্য k1বা k211 হয় k1 = 11 - (11 mod 11), তবে, নিয়ন্ত্রণ সংখ্যাটি 11 হবে না, 0 হবে।

চ্যালেঞ্জ

একটি চিঠি, Mবা F(পুরুষ বা মহিলা) এবং ইনপুট হিসাবে এগারো ডিজিটের নম্বর নিন এবং উপরের নিয়ম অনুসারে জন্ম নম্বরটি বৈধ কিনা তা পরীক্ষা করে দেখুন।

  • ইনপুট ফর্ম্যাট এবং অর্ডার alচ্ছিক
  • 11 টি সংখ্যা অবশ্যই একটি একক সংখ্যা বা একটানা স্ট্রিং (আপনি ইনপুটটি নিতে পারবেন না DD, MM, YY, iii, kk)।
  • আপনি তারিখটি বৈধ বলে ধরে নিতে পারেন (310699xxxxx ইনপুট হিসাবে দেওয়া হবে না)
  • আউটপুট একটি সত্য / মিথ্যা মান (1/0, সত্য / মিথ্যা ইত্যাদি)
  • প্রোগ্রাম বা ফাংশন
  • সমস্ত স্ট্যান্ডার্ড বিধি প্রযোজ্য

আপনি একটি তারিখ বাছাই করে এই পৃষ্ঠায় (নরওয়েজিয়ান ভাষায়) সমস্ত বৈধ সংখ্যা খুঁজে পেতে পারেন ।

উদাহরণ:

M, 01010099931
True

F, 01029042620
True

M, 0101009841
False

F, 01010051866
True  

F, 08021690849
True

M, 01029040105
True

M, 01029037473
False

বাইট জিতে সংক্ষিপ্ত কোড।


আমাদের কি এম এবং এফ ছাড়া অন্য জেন্ডারগুলি পরিচালনা করতে হবে? (যদি ["Q", "01010099931"]ফিরে আসে তবে এটি কি true
বিধিবিরোধী

@ চিরু, ধরে নিন কেবল ইনপুট হিসাবে এম বা এফ দেওয়া হয়। অবৈধ ইনপুটটির জন্য অপরিজ্ঞাত আচরণ ঠিক।
স্টিভি গ্রিফিন

উত্তর:


2

পাইথন 3, 227 221 বাইট

ফাংশন যা দুটি আর্গুমেন্ট, লিঙ্গ 'এম' এবং জন্মসূত্রে 'এন' উভয়কেই স্ট্রিং হিসাবে গ্রহণ করে। বিশেষত শেষ লাইনে আরও কিছু গল্ফ করা হতে পারে। আমি এটিতে কাজ চালিয়ে যাব।

def a(m,n):
 o=[3,7,6,1,8,9,4,5,2];t=[5,4,3,2,7,6,5,4,3,2];n=list(map(int,n));y=z=b=0;q=11
 for i in n[:9]:z+=o[b]*i;y+=t[b]*i;b+=1
 print((q-z%q)%q==n[9] and (q-(y-z-z)%q)%q==n[-1] and len(n)<12 and ord(m)%2==n[8]%2)

2

জাভাস্ক্রিপ্ট (ES2016), 275 259 255 254 252 বাইট

গল্ফড :

f=(g,I)=>{[,d,m,y,i,k]=/(..)(..)(..)(...)(..)/.exec(I.padEnd(12)),v=g.charCodeAt()%2!=i%2|y<=39&i<500,s=k=>11-([...I].slice(0,-2).map((e,i)=>e*[..."376189452543276543"][i+!k|9]).reduce((a,b)=>a+b)+2*k)%11,[s(0),s(s(0))].map((s,i)=>v&=k[i]!=s);return!v}

পরীক্ষা :

for (let args of [
    ["M", "01010099931"], // true
    ["F", "01029042620"], // true
    ["M", "0101009841"],  // false
    ["F", "01010051866"], // true
    ["F", "08021690849"], // true
    ["M", "01029040105"], // true
    ["M", "01029037473"]  // false
]) {
    console.log(f(...args));
}

অসমাপ্ত :

let f = (g, input) => {

    /* Sanitize input, destructure arguments via RegExp */
    let [, d, m, y, i, k] = /(..)(..)(..)(...)(..)/.exec(input.padRight(12));

    /* Validate gender and year */
    let violation = g.charCodeAt() % 2 != i % 2 | y <= 39 & i < 500;

    let n = [..."376189452543276543"];
    /* This function computes k1 if given no arguments, k2 if given one argument */
    let s = k => 11 - ([...input].slice(0, -2).map((e, i) => e * n[i + !k | 9]).reduce((a, b) => a + b) + 2 * k) % 11;

    /* Validate the control numbers k */
    [s(0), s(s(0))].map((s, i) => violation &= k[i] != s);

    return !violation;
}

1

জেএস, 343 বাইট

x=prompt().replace(/F/,1).replace(/M/,2).match(/\d{1}/g);v=Math.abs((x[0]-x[9])%2);v++;t=x[5]*10+x[6]*1;i=x[7]*1;if(t>39&&i>4){v--}if((11-(3*x[1]+7*x[2]+6*x[3]+1*x[4]+8*x[5]+9*x[6]+4*x[7]+5*x[8]+2*x[9])%11)%11===x[10]*1&&(11-(5*x[1]+4*x[2]+3*x[3]+2*x[4]+7*x[5]+6*x[6]+5*x[7]+4*x[8]+3*x[9]+2*x[10])%11)%11===x[11]*1){v++}alert(Math.floor(v/3))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.